matplotlib - 在循环中生成箱线图
我想在一个图里画几个箱线图,并且都放在同一个坐标轴上。不过,我用来画箱线图的数据太大,不能一次性全部读进内存。所以我用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()