我有一个包含时间戳的数据集和包含摘要计数的三列。数据集如下所示:
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轴汇总到当天。
我能得到的最接近的是:
%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进行测试,这产生了这种丑陋,仍然没有阴影区域:
感谢任何帮助!
答案 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()