配列に約10,000個のアイテムをプロットしています。それらは約1,000の固有の値です。
プロットは現在30分実行されています。残りのコードが機能することを確認しました。
遅いですか?ヒストグラムをpyplotでプロットするのはこれが初めてです。
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()
ほぼ即座にプロットし、遅滞なくパンおよびズームできます。
seaborn をコードのどこかにインポートすると、 pyplot.hist に非常に長い時間がかかる場合があります。
問題が海に浮かぶ場合は、matplotlib設定をリセットすることで解決できます。
import seaborn as sns
sns.reset_orig()
私にとって問題は、pd.seriesのデータ型(たとえばS)が「float64」ではなく「object」であるということです。 S = np.float64(S)
を使用した後、plt.hist(S)は非常に高速です!!
Numpy配列をフラット化した後、すぐにヒストグラムをプロットします。以下のデモコードを試してください。
import numpy as np
array2d = np.random.random_sample((512,512))*100
plt.hist(array2d.flatten())
plt.hist(array2d.flatten(), bins=1000)
パンダを使用している場合は、plt.hist()で渡したデータがデータフレームではなく1-dシリーズであることを確認してください。これは私を助けました。
私にとっては、histの呼び出し後にfigure.canvas.draw()
を呼び出してすぐに更新する必要がありました。つまり、histは実際には高速でした(タイミングを計った後に発見されました)が、図が更新されるまでに数秒の遅延がありました。 jupyterラボセル(qt5バックエンド)のmatplotlibコールバック内でhistを呼び出していました。
私が抱えていた問題に遭遇した人は誰でも-(これは完全に私の悪いことです:))
数値を扱う場合は、CSVから読み取るときに、データ型が文字列ではなくint/floatであることを確認してください。
values_arr = .... .flatten().astype('float')