使用 Seaborn 和 ci="sd" 函数绘制线图

问题描述 投票:0回答:1

我正在尝试在seaborn中制作一些时髦的图表,需要一些帮助。

我有一些股票数据,由5只股票组成。我基本上是想直观地展示

Stock A
与其他版本相比的表现。为此,我查看了累积回报,并计算了其他 4 只股票的平均累积回报。我已将这些数据分为以下 2 个
df
:

股票A的数据让我们调用

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
的线略有不同,并利用 seaborns 标准差线图。

我找到了这个示例代码

sns.relplot(x="timepoint", y="signal", kind="line", ci="sd", data=fmri)
,但是当我尝试将其更改为我的需要时,我收到了错误消息,并且无法让所有数据显示在同一个图表上。

这是我的目标的近乎完美的示例,但我想包括来自

df2
的库存 B、C、D 和 E,并当然更改轴标签。

非常感谢任何帮助。干杯

python pandas seaborn confidence-interval errorbar
1个回答
1
投票

这应该会产生您所要求的结果:

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')
© www.soinside.com 2019 - 2024. All rights reserved.