matplotlib - 在循环中生成箱形图

时间:2014-09-11 11:46:09

标签: python matplotlib

我想在一个轴上绘制一个图中的几个箱图。但是,我用于箱图的数据太大而无法立即读入内存。所以我使用pandas read_csv()以块的形式阅读它。我想要做的是在每次迭代中生成一些箱图,并将迭代i中的新箱图添加到与迭代i-1的箱图相同的图中,而不是保留迭代i-1的数据。

我想强调一点,我不需要更新已有的箱图的数据。这更像是每次迭代都得到一个新的数据列,我想在现有的boxplot旁边显示该列的boxplot。

例如:说我有

df = pd.DataFrame(np.random.rand(100,2))

假设我只能一个接一个地读取列。如何将第二列的boxplot添加到第一列的现有boxplot中,以获得与ax.boxplot(df.values)相同的结果?

2 个答案:

答案 0 :(得分:5)

boxplot方法有一个positions参数。使用它,您可以在一个循环中保证每个箱图(或多个箱图)都设置在它的位置。

以下是一些代码:

In [17]: x = pds.DataFrame(np.random.randn(10, 10))
In [18]: fig = plt.figure()
In [19]: ax = plt.subplot(111)
In [20]: for i in range(10):
    ...:     ax.boxplot(x.ix[:,i].values, positions = [i])
    ...:     
In [21]: ax.set_xlim(-0.5, 9.5)
In [22]: plt.show()

答案 1 :(得分:1)

请注意以下更新:

ax.boxplot(x.ix[:,i].values, positions = [i])

应替换为:

ax.boxplot(x.iloc[:,i].values, positions = [i])

不推荐使用ix。