有没有一种方法可以创建一个堆积图,或者使用matplot / seaborn在一个堆积图Y轴中创建一条线?

时间:2019-11-06 11:15:15

标签: python pandas dataframe matplotlib seaborn

我是数据框可视化的新手,我正在探索这些方法,但似乎无法找到创建所需的非常特殊的图的方法。

我有一个像下面这样的数据框,其中我将日期时间作为索引和4个配置文件(而可能会有更多的列对绘图不感兴趣):

datetime                                                        
2019-06-11 00:00:00  28.97  38.47    NaN  41.47   
2019-06-11 01:00:00  28.83  38.42    NaN  41.48   
2019-06-11 02:00:00  28.72  38.38    NaN  41.49   
2019-06-11 03:00:00  28.56  38.33    NaN  41.49   
2019-06-11 04:00:00  28.36  38.22    NaN  41.51

我的目的是创建一个具有所描述规格的图:

  1. 线图,每个配置文件一个,但全部在一个图中

  2. 线段应相交,因此轮廓应一叠叠放,最好是轮廓1位于最顶部。

  3. 值不应更改,因此应该将Y轴堆叠起来。

  4. 图例应该是4个轮廓的整个图的一个。

  5. 具有NaN值的轮廓的图或线不应显示。

如果您能提出建议或指导我解决问题,我将不胜感激?

此外,是否有简短的结构化指南,其中包含一些示例,您会向我推荐这些示例,以便在可视化中获得一些良好的基础知识?我更喜欢在通勤时可以打印或通过平板电脑阅读的内容。

谢谢您的输入:-)

1 个答案:

答案 0 :(得分:0)

可能对您有帮助:

df[3] = pd.to_numeric(df[3], errors = 'coerce').fillna(0)
df = df.rename(columns = {1:'A',2:'B',3:'C',4:'D'})
df = df.set_index(0)
df

Out[1]:

                        A      B    C    D
                 0              
2019-06-11 00:00:00 28.97   38.47   0.0 41.47
2019-06-11 01:00:00 28.83   38.42   0.0 41.48
2019-06-11 02:00:00 28.72   38.38   0.0 41.49
2019-06-11 03:00:00 28.56   38.33   0.0 41.49
2019-06-11 04:00:00 28.36   38.22   0.0 41.51


import matplotlib.dates as mdates


ax = [None]*4

fig = plt.figure()
f, (ax[0], ax[1], ax[2], ax[3]) = plt.subplots(4, 1, sharex=True)

ax[3].set_xlabel('Hours')

color = ['r','g','b','y']
for i in range(4):
    col = df.columns[i]
    _ = ax[i].plot(df.index,df[col], label = col, c = color[i])

xfmt = mdates.DateFormatter('%H:%M')
ax[3].xaxis.set_major_formatter(xfmt)
ax[3].xaxis.set_major_locator(mdates.HourLocator(byhour=range(24)))


_ = f.legend()

enter image description here