使用matplotlib和pandas绘制多个时间序列功率数据

时间:2014-07-28 07:47:41

标签: python matplotlib pandas

我在几个电台有一个功率电平的csv文件(在这种情况下为4,但是#34; HUT4和#34;不在这个简短的摘录中):

2014-06-21T20:03:21,HUT3,74
2014-06-21T21:03:16,HUT1,70
2014-06-21T21:04:31,HUT3,73
2014-06-21T21:04:33,HUT2,30
2014-06-21T22:03:50,HUT3,64
2014-06-21T23:03:29,HUT1,60
(etc . .)

跨站的时间不同步。功率水平(在这种情况下)是整数百分比。有些机器以伏特(~13.0)报告,这在绘图时会是一个额外的问题。

数据很容易读入数据框,索引数据框,放入字典中。但我无法获得正确的语法来制作有意义的情节。在单个地块上的所有站点共享对于所有站点足够大的时间线,或者作为单独的地块,可以是每个站点的子图。如果我这样做:

import pandas as pd
df = pd.read_csv('Power_Log.csv',names=['DT','Station','Power'])
df2=df.groupby(['Station']) # set 'Station' as the data index
d = dict(iter(df2)) # make a dictionary including each station's data
for stn in d.keys():
    d[stn].plot(x='DT',y='Power')
plt.legend(loc='lower right')
plt.savefig('Station_Power.png')

我确实得到了一个情节,但X轴并不适合每个电台。

我还没想出如何做四个独立的子图,这将使我无法制作足够宽的时间尺度。

我非常感谢有关获得单个情节和/或获得好看的子情节的评论。子图不需要同步X轴。

2 个答案:

答案 0 :(得分:0)

我宁愿绘制典型的方式,如:

import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.savefig()

http://matplotlib.org/users/pyplot_tutorial.html

更多子图:只需多次调用plt.plot(),每个数据系列一次。

P.S。你可以用这种方式设置xticks:Changing the "tick frequency" on x or y axis in matplotlib?

答案 1 :(得分:0)

很抱歉上面的评论我需要添加代码。还在学习 。

从第5行代码开始:

import matplotlib.dates as mdates
for stn in d.keys():
     plt.figure()
     d[stn].interpolate().plot(x='DT',y='Power',title=stn,rot=45)
     plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%D/%M/%Y'))
     plt.savefig('Station_Power_'+stn+'.png')

除了DateFormatter行之外,我想做什么或多或少都不起作用。我想缩短我的日期时间数据以显示日期。如果它在午夜放置蜱,那将是辉煌但不是绝对必要的。

获得连续绘图的关键是在绘图中使用interpolate()方法。

由于这些数据在不同站点之间具有不同的x比例,因此同一图表上所有站点的图表都不起作用。即使日期时间值与其他HUT的范围大致相同,我的数据中的HUT4记录也少得多,而且只有大约25%的比例。