【发布时间】:2016-10-28 03:08:24
【问题描述】:
我想在子图中绘制 5 个时间序列。基本上我一直在使用子图:
fig, axes = plt.subplots(nrows=5, ncols=1, figsize=(16,10), sharex=True)
xlim = (start, end)
ax1=df.hr.plot(ax=axes[0], color='green', xlim=xlim)
ax2=df.act.plot(ax=axes[1], color='orange', xlim=xlim)
ax3=df.rr.plot(ax=axes[2], color='blue', xlim=xlim)
ax4=df2.set_index('timestamp').rmssd.plot(color='purple', ax=axes[3], xlim=xlim)
ax5=ma_df.tz_convert('US/Eastern')['any_act'].resample('10Min', how='count').plot(kind='line',ax=axes[4])
哪个产生
由于数据的性质,我想将最后一个子图可视化为条形图。所以很自然,我把最后一行改成:
ax5=ma_df.tz_convert('US/Eastern')['any_act'].resample('10Min', how='count').plot(kind='bar',ax=axes[4])
然后创建下图:
在最后一个子图中产生了我所期望的结果,但使其他图无用。不用说,这不是我想要的。
如何将 4 线时间序列与一个条形图组合在同一个图中,但不同的子图都共享相同的 x 轴? 这意味着我希望前 4 个子图像第一张图片一样,最后一个子图像第二张图片一样。
更新
我做了一个简单的例子,不幸的是,它按预期工作,并没有复制我的问题,这更令人费解。代码如下
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
df = pd.read_csv('https://s3.amazonaws.com/temp-leonsas-qsaeamu0sl5v4b/df.csv')
bar_df = pd.read_csv('https://s3.amazonaws.com/temp-leonsas-qsaeamu0sl5v4b/bar_df.csv')
fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(16,10), sharex=True)
ax1=df.hr.plot(ax=axes[0], color='green', kind='line')
ax2=df.act.plot(ax=axes[1], color='orange', kind='line')
ax3=df.rr.plot(ax=axes[2], color='blue', kind='line')
ax4=bar_df.occ_count.plot(ax=axes[3], kind='bar')
而我的代码库中复制问题的代码是
fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(16,10), sharex=True)
ax1=df.hr.plot(ax=axes[0], color='green', kind='line')
ax2=df.act.plot(ax=axes[1], color='orange', kind='line')
ax3=df.rr.plot(ax=axes[2], color='blue', kind='line')
ax4=bar_df.occ_count.plot(ax=axes[3], kind='bar')
主要区别在于,在我的代码库中,DataFrame 是生成的,而不仅仅是从 s3 加载的。 DataFrame 中是否有隐式配置可以以某种方式实现这一点?我刚刚使用df.to_csv 将这两个数据帧转储到 S3 中。
【问题讨论】:
-
您是否尝试过先调用条形图,然后再绘制线图?您可能会从重采样中获得不需要的帮助程序活动,但这不是一个完整的示例。至少提供虚拟数据并查看重现错误需要多少线图。 [MVCE]
-
@cphlewis 查看我在帖子中的更新。
-
可能是索引略有不同,请在绘图前尝试在数据帧上调用
reset_index -
如果 maxymoo 的建议不起作用,您可以缩小重现此问题所需的数据量。上半场?下半场?下半场的前半场?等
标签: python pandas matplotlib