Линейный участок с функцией Seaborn и ci = "sd" в Python - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать шикарные графики в Сиборне, и мне нужна помощь.

У меня есть некоторые данные по акциям, состоящие из 5 акций. Я в основном пытаюсь визуально показать, как Stock A работает по сравнению с другими. Для этого я просматриваю совокупную доходность, а также рассчитываю среднюю совокупную доходность для остальных 4 акций. Я разделил эти данные на следующие 2 df:

Данные запаса А назовем df:

Date              Stock A               
2019-04-24 07:59  0.433366
2019-04-24 08:59  0.397984
2019-04-24 09:59  0.403971
2019-04-24 10:59  0.399131
2019-04-24 11:59  0.386641
2019-04-24 12:59  0.388572
2019-04-24 13:59  0.396266
2019-04-24 14:59  0.391609
2019-04-24 15:59  0.399412
2019-04-24 16:59  0.401715

А затем Акции B, C, D & E, плюс вычисленное среднее значение, назовем df2 (я не могу напечатать все 5 столбцов):

Date              Stock B   Stock C    Stock E   Average                                             
2019-04-24 07:59  0.273965  0.000982    0.409717  0.472029
2019-04-24 08:59  0.235606  -0.076309   0.345047  0.407299
2019-04-24 09:59  0.240826  -0.059274   0.346769  0.413197
2019-04-24 10:59  0.234849  -0.056013   0.338185  0.407962
2019-04-24 11:59  0.230158  -0.062947   0.331907  0.397927
2019-04-24 12:59  0.237573  -0.055506   0.334907  0.412206
2019-04-24 13:59  0.239994  -0.047875   0.334213  0.413846
2019-04-24 14:59  0.230461  -0.059781   0.312962  0.395924
2019-04-24 15:59  0.236968  -0.054398   0.320990  0.406967
2019-04-24 16:59  0.239918  -0.049522   0.328713  0.412818

В конечном итоге я собираюсь нанести на график все 5 акций плюс среднее на одном графике, который имеет приятный серый фон и, возможно, некоторые линии сетки и т. Д. (В данный момент я могу строить графики только с уродливым белым фоном), но я хотели бы, чтобы линия для Stock A и Average немного отличалась и использовала график линии стандартного отклонения морского рожка.

Я нашел этот пример кода sns.relplot(x="timepoint", y="signal", kind="line", ci="sd", data=fmri), но когда я попытался изменить его в соответствии со своими потребностями, я получил сообщения об ошибках и не смог отобразить все данные на одном и том же графике.

Вот почти идеальный пример того, к чему я стремлюсь, но я хотел бы включить запасы B, C, D & E из df2 и, конечно, изменить маркировку оси.

Любая помощь с благодарностью. Приветствия

enter image description here

1 Ответ

1 голос
/ 25 апреля 2019

Это должно привести к тому, что вы просили:

sns.set() #This sets the style to the seaborn default (gray background with white grid on)
fig,ax = plt.subplots() #create your figure and ax objects
sns.lineplot('Date', 'Stock A', ci="sd", data=df,ax=ax) #plot lines
sns.lineplot('Date', 'Stock B', ci="sd", data=df2,ax=ax)
sns.lineplot('Date', 'Stock C', ci="sd", data=df2,ax=ax)
sns.lineplot('Date', 'Stock E', ci="sd", data=df2,ax=ax)
sns.lineplot('Date', 'Average', ci="sd", data=df2,ax=ax)
plt.xticks(rotation=-45) #makes ticks visible (a long date would be unreadable otherwise)

РЕДАКТИРОВАТЬ

Отвечая на вопросы OP из комментариев:

Преобразовать ваши даты из строк в datetime объекты,тогда matplotlib позаботится о тиках и tickslabels.
Поскольку они прямо сейчас, они интерпретируются как строки и все они построены.

df['Date']=pd.to_datetime(df['Date'])
df2['Date']=pd.to_datetime(df2['Date'])

Используйте следующую строку, чтобы изменитьylabel

ax.set_ylabel('Returns')
...