我正在绘制数组中的大约10,000个项目。它们具有大约1,000个独特的值。
情节现在已经运行了半个小时。我确保其余代码有效。
这很慢吗?这是我第一次使用pyplot绘制直方图。
答案 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')
答案 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()
立即工作。