使用scipy和matplotlib绘制分位数,中位数和点差

我是matplotlib的新手,我想创建一个情节,其中包含以下信息:

>连接大约200个可变长度向量的中位数的行(输入)
>连接这些矢量的相应分位数的线.
>连接相应点差的线(最大和最小点).

所以基本上,它有点像连续的盒子情节.

谢谢!

解决方法:

使用scipy和matplotlib(你只在你的问题中标记了那些库)有点冗长,但是你要这样做(我只是为分位数做):

import numpy as np
from scipy.stats import mstats
import matplotlib.pyplot as plt

# Create 10 columns with 100 rows of random data
rd = np.random.randn(100, 10)
# Calculate the quantiles column wise
quantiles = mstats.mquantiles(rd, axis=0)
# Plot it
labels = ['25%', '50%', '75%']
for i, q in enumerate(quantiles):
    plt.plot(q, label=labels[i])
plt.legend()

哪个给你:

现在,我会试着说服你去尝试Pandas库:)

import numpy as np
import pandas as pd
# Create random data
rd = pd.DataFrame(np.random.randn(100, 10))
# Calculate all the desired values
df = pd.DataFrame({'mean': rd.mean(), 'median': rd.median(),
                   '25%': rd.quantile(0.25), '50%': rd.quantile(0.5),
                   '75%': rd.quantile(0.75)})
# And plot it
df.plot()

你会得到:

或者你可以只用一行获得所有统计数据:

rd.describe().T.drop('count', axis=1).plot()

注意:我放弃了计数,因为它不是“5号码摘要”的一部分.

上一篇:如何在PHP中从数组中获取框图密钥数?


下一篇:是否有一种使用Python Matplotlib在分组箱图上显示样本大小的好方法