2012-01-09 12 views
2

私は、x、y平面上のランダムな散乱データを含むデータファイルを持っています。私が望むのは、散らばった領域を単色で塗りつぶすことだけです。私のデータはソートされていません。私はmatplotlibでscatterplotを使用しようとしましたが、データファイルのポイント数がかなり多いので、散布図をプロットすると結果として得られるプロットがかなり大きくなります。散乱データは、x、y平面上の小さな島を形成する。matplotlibの散在領域を埋める方法は?

+0

あなたは等高線図を使用することができますのではなく、値(ヒートマップ)の全範囲を見るためにimshow(hist)をプロットすることができますか?たとえば、['matplotlib.pyplot.contourf'](http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.contourf)を参照してください。 – Chris

答えて

3

間に充填するfill_betweenあなたはxのヒストグラム(2D)、numpyののhistogram2d方法を使用してyの値を算出することができるもあります。次に、0でないすべてのビンについて真であり、すべてのゼロビンに対してfalseである配列をプロットします。 binsパラメータを使用して、ヒストグラムの解像度を制御できます。このメソッドは、3つの配列からなるタプルを返します.2次元ヒストグラムと2つの1D配列が各「エッジ」(xとy)に沿ってビンステップに対応します。ステップ値はrangeパラメータを使用して制御できます。で

import matplotlib.pyplot as plt 
import numpy as np 
np.random.seed(101) 
x = np.random.normal(0,1,10000) 
y = np.random.normal(0,1,10000) 

hist,xedge,yedge= np.histogram2d(x,y,bins=100,range=[[-4,4],[-4,4]]) 

plt.imshow(hist==0, 
      origin='lower', 
      cmap=plt.gray(), 
      extent=[xedge[0],xedge[-1],yedge[0],yedge[-1]]) 

plt.savefig('hist2d.png') 
plt.show() 

これは、結果:たとえば

を使用すると、任意のデータを持っているところ

enter image description here

黒い点が示すデータが存在しない場合には、白点です。ヒストグラムは、画像または行列のプロットに使用されるimshowメソッドを使用して表示されます。デフォルトでは原点が左上に設定されるので、パラメータorigin='lower'を変更するか、範囲値を制御するextentパラメータを適切に調整します。[intial x、final x、initial y、final y ]。 color mapを調整して配色を制御できます。

@joaquinはコメントで述べているように、あなたはまた、単に0または1

+1

+1 'plt.imshow(hist)'だけでヒートマップを作ることができます。多分、yes/noだけでなく各ポイントで密度感覚を与えるので、OPはそれをより好きかもしれません。 – joaquin

+1

+1しかし、ヒストグラム2dは多数のポイントに対して非効率的です。あなたが数万点以上の点で使用すると、あなたは記憶の問題にぶつかります。 'scipy.sparse.coo_matrix'を反復するかトリックする方がずっと速くなります。 –

+0

私の前のコメントを部分的にスクラッチしていますが、たくさんの点があってもビン数が少ないとかなり速くなります。多数のビンと多数のポイントがある場合は、他のソリューションより効率が悪くなります。また、私の非効率的な記憶は、もっと初期のバージョンに基づいていました。最近のバージョンのnumpyの場合でも、それはまだかなり効率的です。 –

関連する問題