如果您有大量数据点,如何管理箱形图的生产?

时间:2019-12-16 23:16:14

标签: python numpy matplotlib

请考虑以下代码段:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(1, 5760000)
plt.boxplot(data)

matplotlib绘制该图需要花费很长时间,并且要占用大量内存。

我有什么更好的方法?

我的一个想法是使用numpy计算最小值,最大值,中位数,第一四分位数和第三四分位数。然后,我可以将这些值直接提供给boxplot,这样就不必进行计算。

此代码段运行速度非常快:

import numpy as np

data = np.random.rand(1, 5760000)
fq, median, tq = np.quantile(data, [0.25, 0.5, 0.75])
dmin, dmax = np.min(data), np.max(data)

但是,没有这样的选项(我可以看到)。

我的第二个想法是根据上述统计信息手动绘制箱形图,但这需要我处理matplotlib艺术家的详细信息,如果可能的话,我希望避免这种情况。

我的第三个想法是只使用一种简单的样式来绘制相关的箱形图数量。它看起来不像是箱形图,但传达的是相同的信息。

我现在将使用第三个想法,但是我希望有一种方法可以直接使用boxplot

1 个答案:

答案 0 :(得分:-1)

首先:boxplotdata = np.random.rand(1, 10)的解释与data = np.random.rand(10, 1)不同。第一个解释为10个箱形图的列表,每个都从1个数据点创建,而第二个解释为1个箱形图的列表,每个都有10个数据点。

因此,在单个图形中传递np.rand.rand(1, 5760000)个图5760000的各个箱形图。这就是时间和内存的消耗。实际上,您想传递np.rand.rand(5760000, 1),因为您想用包含约600万个数据点的数据集中的统计信息绘制一个箱形图。

第二:下一页回答了如何将数据手动传递到箱形图抽屉功能:https://matplotlib.org/3.1.0/gallery/statistics/bxp.html