使用 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】:我认为你需要pivot
或set_index
和unstack
和DataFrame.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 的回答,因为我比pivot
和 unstack
命令更熟悉 groupby
命令。但是,我很快就会仔细看看这些。
没问题,显然一个问题是多个好的答案。祝你好运!以上是关于使用 ggplot 从数据帧中绘制不规则时间序列(多个)的主要内容,如果未能解决你的问题,请参考以下文章