Python绘制中位数值

2 投票
2 回答
8384 浏览
提问于 2025-04-17 16:18

我刚接触Numpy和matplotlib。

我有一些数据,想要把它们和日期进行绘图,并且我只想画出每个日期的中位数。每个日期的数据点数量是不一样的。

我创建了一个二维的numpy数组,像这样:

[[date1, v1], [date1, v2], [date2, v3], [date3, v4], [date3, v5], [date3, v6]] 

等等……

现在我有点迷了。我要怎么画出每天的中位数呢?

2 个回答

2

要计算中位数,可以直接使用numpy库里的median函数:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.median.html

如果你想处理日期,可以看看matplotlib的日期文档:

http://matplotlib.org/api/dates_api.html

这里有一个简单的日期示例,可能对你有帮助:

http://matplotlib.org/examples/api/date_demo.html

如果看完这些还是不明白,可以试着发一些你的代码,或者问一个更具体的问题。

2

对于时间序列数据,我强烈建议使用pandas,这个库是基于numpy的。

它提供了一些方便的方法,可以帮助你解决类似的问题。

In [5]: import pandas as pd

# generate some data
In [6]: idx = pd.date_range('2013-01-01', pd.datetime.today(), freq='H')

In [7]: s = pd.Series(np.random.random_sample(idx.size) * 1000, index=idx)

In [8]: s.describe() # print some statistics 
Out[8]: 
count    1184.000000
mean      499.817905
std       291.446537
min         0.292728
25%       252.537037
50%       485.828521
75%       758.535148
max       999.681320

In [9]: s.index
Out[9]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00, ..., 2013-02-19 07:00:00]
Length: 1184, Freq: H, Timezone: None

# downsample to daily using median value for a day and plot it
In [10]: s.resample('D', how='median').plot()
Out[10]: <matplotlib.axes.AxesSubplot at 0x3d88ad0>

pandas_example

撰写回答