Matplotlib.pyplot.hist() 非常慢

问题描述 投票:0回答:10

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

剧情已经进行了半个小时了。我确保其余代码有效。

有那么慢吗?这是我第一次用 pyplot 绘制直方图。

python matplotlib histogram
10个回答
28
投票

要使用 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()

几乎立即绘制,并且可以毫无延迟地平移和缩放。


17
投票

展平 numpy 数组后,可以立即绘制直方图。尝试下面的演示代码:

import numpy as np

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

7
投票

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

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

import seaborn as sns
sns.reset_orig()

3
投票

对我来说,问题在于

pd.Series
的数据类型(比如 S)是
'object'
而不是
'float64'
。我用了
S = np.float64(S)
之后,
plt.hist(S)
就非常快了。


2
投票

由于几个答案已经提到了

pandas.hist()
缓慢的问题,请注意,这可能是由于处理非数字数据造成的。 使用
value_counts()
轻松解决问题:

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

学分


1
投票

我使用 Pandas

.hist()
方法也面临同样的问题。对我来说,解决方案是:

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

立即见效。


0
投票

对我来说,在调用 hist 后需要调用

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


0
投票

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

如果您正在处理数字,请确保从 CSV 读取时您的数据类型是 int/float,而不是字符串。

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

0
投票

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


0
投票

对于我来说,在我的例子中的 histplot 调用(sns)之前放置以下代码片段是有效的:

import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('Qt5Agg')
© www.soinside.com 2019 - 2024. All rights reserved.