4

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

  1. 一条连接大约 200 个可变长度向量(输入)中位数的线
  2. 连接这些向量的相应分位数的线。
  3. 连接相应价差(最大和最小点)的线。

所以基本上,它有点像一个连续的箱线图。

谢谢!

4

1 回答 1

14

只使用scipyand 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()

在此处输入图像描述

注意:我放弃了,count因为它不是“5 数字摘要”的一部分。

于 2013-08-19T12:23:18.077 回答