使用 ggplot 从数据帧中绘制不规则时间序列(多个)

Posted

技术标签:

【中文标题】使用 ggplot 从数据帧中绘制不规则时间序列(多个)【英文标题】:Plotting irregular time-series (multiple) from dataframe using ggplot 【发布时间】:2017-10-26 14:15:24 【问题描述】:

我的 df 结构如下:

   UnitNo        Time           Sensor
0   1.0   2016-07-20 18:34:44    19.0
1   1.0   2016-07-20 19:27:39    19.0
2   3.0   2016-07-20 20:45:39    17.0
3   3.0   2016-07-20 23:05:29    17.0
4   3.0   2016-07-21 01:23:30    11.0
5   2.0   2016-07-21 04:23:59    11.0
6   2.0   2016-07-21 17:33:29    2.0
7   2.0   2016-07-21 18:55:04    2.0

我想创建一个时间序列图,其中每个UnitNo 都有自己的线(颜色),y 轴值对应于Sensor,x 轴是Time。我想在ggplot 中执行此操作,但我无法弄清楚如何有效地执行此操作。我看过前面的例子,但它们都有规则的时间序列,即每个变量的观察同时发生,这使得创建时间索引变得容易。我想我可以循环并将数据添加到 plot(?),但我想知道是否有更有效/更优雅的前进方式。

【问题讨论】:

【参考方案1】:
df.set_index('Time').groupby('UnitNo').Sensor.plot();

【讨论】:

感谢 piRSquared。你似乎每天都在帮助我!我是 Matlab 的转换者,python/pandas 需要一些时间来适应,所以你可能会看到我更多:-) 你好@jtam 很高兴我能帮忙。我们很幸运有几个非常好的人回答熊猫问题...... jezrael 显然是其中之一 :-)【参考方案2】:

我认为你需要pivotset_indexunstackDataFrame.plot

df.pivot('Time', 'UnitNo','Sensor').plot()

或者:

df.set_index(['Time', 'UnitNo'])['Sensor'].unstack().plot()

如果有些重复:

df = df.groupby(['Time', 'UnitNo'])['Sensor'].mean().unstack().plot()
df = df.pivot_table(index='Time', columns='UnitNo',values='Sensor', aggfunc='mean').plot()

【讨论】:

感谢这个耶兹瑞尔!我更喜欢 piR 的回答,因为我比 pivotunstack 命令更熟悉 groupby 命令。但是,我很快就会仔细看看这些。 没问题,显然一个问题是多个好的答案。祝你好运!

以上是关于使用 ggplot 从数据帧中绘制不规则时间序列(多个)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ggplot2 中正确绘制投影网格数据?

在R中的单个图上绘制两个变量的条形图和第三个变量的线图

迭代地绘制ggplot中的所有列

使用 ggplot2 线绘制平均值?

在ggplot2中的两个位置之间绘制曲线

ggplot2:从列表和常见图例中在多个页面上绘制图形