numpy 如果您有大量的数据点,如何管理箱形图的制作?

ntjbwcob  于 2022-12-18  发布在  其他
关注(0)|答案(2)|浏览(169)

请看下面的代码片段:

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

fafcakar

fafcakar1#

import numpy as np
import matplotlib.pyplot as plt

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

g2ieeal72#

第一个: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

相关问题