从大型数据集

时间:2015-04-27 12:27:11

标签: python matplotlib plot ram

假设我的计算机上有4个文件保存为.npz文件:W,X,Y和Z. 我们假设我的计算机在RAM消耗方面不能同时加载多于一个。

我怎样才能运行此命令? :

 matplotlib.pyplot.boxplot([W],[X],[Y],[Z])

换句话说,如何加载W,绘制W,删除W然后加载Y,绘制Y,删除Y,...并将其中的4个放在同一个图上? (而不是子情节)

谢谢!

2 个答案:

答案 0 :(得分:2)

matplotlib.axes.boxplot函数实际上调用了两个函数。一个用于计算必要的统计量(cbook.boxplot_stats),另一个用于实际绘制图(matplotlib.axes.bxp)。您可以通过为每个数据集调用第一个数据集(通过一次加载一个数据集)来利用此结构,然后将结果提供给绘图函数。

在下面的这个例子中,我们有3个数据集并迭代它们以收集cbook.boxplot_stats的输出(它只需要很少的内存)。之后调用ax.bxp创建图表。 (在您的应用程序中,您将迭代加载文件,使用boxplot_stats并删除数据)

import matplotlib.cbook as cbook
import matplotlib.pyplot as plt
import numpy as np


x = np.random.rand(10,10)
y = np.random.rand(10,10)
z = np.random.rand(10,10)

fig, ax = plt.subplots(1,1)

bxpstats = list()
for dataset, label in zip([x, y, z], ['X', 'Y', 'Z']):
    bxpstats.extend(cbook.boxplot_stats(np.ravel(dataset), labels=[label]))
ax.bxp(bxpstats)
plt.show()

结果:

enter image description here

答案 1 :(得分:0)

一种选择是将数据的随机样本传递给绘图功能。

或者,因为boxplot只包含聚合数据,所以你应该考虑分别计算这些聚合值,然后将它们应用到boxplot可视化中。

使用documentation中的完整选项列表,您可以通过传递汇总数据来构建箱图:

boxplot(self, x, notch=False, sym='b+', vert=True, whis=1.5,
    positions=None, widths=None, patch_artist=False,
    bootstrap=None, usermedians=None, conf_intervals=None,
    meanline=False, showmeans=False, showcaps=True,
    showbox=True, showfliers=True, boxprops=None, labels=None,
    flierprops=None, medianprops=None, meanprops=None,
    capprops=None, whiskerprops=None, manage_xticks=True):

参见例如usermedians:

  

usermedians:array-like或None(默认)

     

第一个维度(或长度)与x兼容的数组或序列。这将覆盖matplotlib为非用户培训的每个元素计算的中位数。当usermedians的元素== None时,matplotlib将正常计算中位数。