Сделайте линию толще на графике «спагетти» временного ряда matplotlib

Спасибо за чтение.

У меня есть участок, и я хотел бы выделить последний год в моем наборе данных. Мои данные представляют собой всего лишь один длинный временной ряд, поэтому я хочу построить график сравнения в годовом исчислении, поэтому я поворачиваю его, а затем рисую.

Первый блок кода запускается и дает мне примерно то, что мне нужно (без выделения последнего года), затем во втором блоке кода я пытаюсь выделить свой последний (что технически работает), но цвет другой, не не соответствует легенде и даже может быть того же цвета, что и другой год.

Я вижу старый сериал на заднем плане. Я думаю, что создаю еще один сюжет и помещаю его сверху, но как я могу выбрать исходную строку для последнего года (в данном случае 2018) и просто выделить ее?

Или есть лучший способ сделать весь этот процесс? Буду очень признателен за любые советы по коду, форматированию или чему-то еще, я очень новичок в этом!

Спасибо большое!

13сен1


ПЕРВЫЙ БЛОК

# import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='01-01-2019', freq='M')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])

# pivot to get by month in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.month, columns=df.index.year, values='Data')

# plot
df_pivot.plot(title='Data by Year', figsize=(6,4))
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.tight_layout()
plt.show()

результат первого блока

ВТОРОЙ БЛОК

# import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='01-01-2019', freq='M')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])

# pivot to get by month in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.month, columns=df.index.year, values='Data')

# plot
df_pivot.plot(title='Data by Year', figsize=(6,4))
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.tight_layout()

# plot the thicker last line
# **************** ERROR HERE *************************
plt.plot(df_pivot.iloc[:, -1:], lw=4, ls='--')
# **************** ERROR HERE *************************
plt.show()

результат второго блока


person 13sen1    schedule 08.01.2019    source источник


Ответы (1)


Можно сделать линию прошлого года толще. Поскольку столбцы отсортированы, это будет последняя строка на осях (индекс -1).

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='01-01-2019', freq='M')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])

# pivot to get by month in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.month, columns=df.index.year, values='Data')

# plot
ax = df_pivot.plot(title='Data by Year', figsize=(6,4))
ax.get_lines()[-1].set_linewidth(5)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

ax.figure.tight_layout()
plt.show()

введите здесь описание изображения

person ImportanceOfBeingErnest    schedule 08.01.2019
comment
Это именно то, что я был после. Большое спасибо за ваш быстрый и идеальный ответ. - person 13sen1; 08.01.2019