请考虑以下代码段:
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
。
答案 0 :(得分:-1)
首先:boxplot
对data = 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