matplotlib - 在循环中生成箱线图

6 投票
2 回答
20153 浏览
提问于 2025-04-21 02:04

我想在一个图里画几个箱线图,并且都放在同一个坐标轴上。不过,我用来画箱线图的数据太大,不能一次性全部读进内存。所以我用pandas的read_csv()方法分块读取数据。我想在每次读取数据时生成一些箱线图,并把这次的箱线图加到之前的图上,而不需要保留上一次的数据。

我想强调的是,我并不需要更新已经存在的箱线图的数据。每次迭代时,我就像是得到了一个新的数据列,我想把这个新列的箱线图放在已有箱线图旁边。

比如说,我有

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

假设我只能一个一个地读取列。那么,我该如何把第二列的箱线图加到第一列的箱线图上,达到和ax.boxplot(df.values)一样的效果呢?

2 个回答

3

请注意以下更新:

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

应该替换为:

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

因为 ix 已经不再推荐使用了。

9

这个箱线图的方法有一个叫做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()

撰写回答