绘制具有多个聚合的时间序列

时间:2018-02-17 16:47:28

标签: python plot visualization bokeh

我有一个包含时间戳的数据集和包含摘要计数的三列。数据集如下所示:

date_hour   children    adults  seniors
1/1/18 0:00 243 247 358
1/1/18 1:00 265 320 499
1/1/18 2:00 292 261 386
1/1/18 3:00 232 324 251
1/1/18 4:00 368 464 300
1/1/18 5:00 247 477 469
1/1/18 6:00 452 432 252
1/1/18 7:00 366 263 414
1/1/18 8:00 275 296 475
1/1/18 9:00 290 257 441
1/1/18 10:00    346 258 459
1/1/18 11:00    352 231 436
1/1/18 12:00    284 261 214

数据集是一周,我想使用pandas或类似的方法构建一个可视化,以小时为单位显示数据作为堆积区域。我把这个可视化作为Bokeh中的时间序列线条或作为熊猫图表没有遇到任何麻烦,但我似乎无法弄清楚如何将它完全转换为堆积区域并将x轴汇总到当天。

timeseries line womp womp

我能得到的最接近的是:

%matplotlib inline
df = outcome
df = df.set_index('request_datetime_utc_60_minutes')
df.index = pd.to_datetime(df.index)
df.plot.bar(stacked=True,figsize=(10,8))

我在Jupyter进行测试,这产生了这种丑陋,仍然没有阴影区域:

more ugliness

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

有几种现成的区域选项可以提供略微不同的美学效果。还可以选择使用子点创建绘图。由于您在上面显示的内容提醒了更多的叠线图,下面也有一个。如果用subplots = True替换stacked = True,你会得到一个类似于第二个图但未填充的图。

from numpy.random import randint
import pandas as pd
import matplotlib.pyplot as plt

# Create a df with a date-time index with data every hour
rng = pd.date_range('1/5/2018 00:00', periods=168, freq='H')
df = pd.DataFrame({'Children':randint(200, 300, 168),
                   'Adults': randint(250, 400, 168),
                   'Seniors': randint(200, 350, 168)}, index=rng)

df.plot.area()
plt.xlabel('Date')
plt.ylabel('Number of Visitors')
plt.show()

df.plot.area(subplots=True)
plt.xlabel('Date')
plt.ylabel('Number of Visitors')
plt.show()

plt.figure()
plt.stackplot(df.index, df['Children'], df['Adults'], df['Seniors'], labels=df.columns)
plt.xlabel('Date')
plt.ylabel('Number of Visitors')
plt.legend()
plt.show()

plt.figure()
df[['Children', 'Adults', 'Seniors']].plot(stacked=True)
plt.xlabel('Date')
plt.ylabel('Number of Visitors')
plt.legend()
plt.show()

enter image description here

enter image description here

enter image description here

enter image description here