Matplotlib.pyplot.hist()非常慢

时间:2016-03-02 03:54:07

标签: python matplotlib histogram

我正在绘制数组中的大约10,000个项目。它们具有大约1,000个独特的值。

情节现在已经运行了半个小时。我确保其余代码有效。

这很慢吗?这是我第一次使用pyplot绘制直方图。

9 个答案:

答案 0 :(得分:7)

要快速使用matplotlib绘制直方图,您需要将histtype='step'参数传递给pyplot.hist。例如:

plt.hist(np.random.exponential(size=1000000,bins=10000))
plt.show()
平移或缩放时,

需要大约15秒的时间来绘制,大约需要5-10秒才能更新。

相比之下,使用histtype='step'绘图:

plt.hist(np.random.exponential(size=1000000),bins=10000,histtype='step')
plt.show()

几乎立即绘制,可以毫不拖延地进行平移和缩放。

答案 1 :(得分:2)

在代码中的某处导入seaborn可能会导致pyplot.hist花费很长时间。

如果问题是seaborn,可以通过重置matplotlib设置来解决:

import seaborn as sns
sns.reset_orig()

答案 2 :(得分:2)

在将numpy数组展平后立即绘制直方图。尝试以下演示代码:

import numpy as np

array2d = np.random.random_sample((512,512))*100
plt.hist(array2d.flatten())
plt.hist(array2d.flatten(), bins=1000)

答案 3 :(得分:1)

由于有几个答案已经提到了 pandas.hist() 的缓慢问题,请注意这可能是由于处理非数值数据造成的。使用 value_counts() 轻松解决的问题:

df['colour'].value_counts().plot(kind='bar')

credits

答案 4 :(得分:0)

对我来说,问题在于pd.series的数据类型(例如S)是“对象”而不是“ float64”。我使用\u25CF => ●之后,然后plt.hist(S)很快!!

答案 5 :(得分:0)

对我来说,在调用hist之后立即调用figure.canvas.draw()来立即更新,即hist实际上很快(在计时后发现),但是在更新图形之前有几秒钟的延迟。我在jupyter实验室单元(qt5后端)的matplotlib回调中调用了hist。

答案 6 :(得分:0)

任何人遇到我遇到的问题-(这完全是我的坏事:))

如果要处理数字,请确保从CSV读取数据类型为int / float,而不是字符串。

values_arr = .... .flatten().astype('float')

答案 7 :(得分:0)

如果您正在使用熊猫,请确保在plt.hist()中传递的数据是一维序列,而不是数据帧。这帮助了我。

答案 8 :(得分:0)

我使用Pandas .hist()方法遇到了同样的问题。对我而言,解决方案是:

pd.to_numeric(df['your_data']).hist()

立即工作。