2Dマップの規則的な間隔のポイントのx、y値を含む.txtファイルがあり、3番目の座標はそのポイントの密度です。
4.882812500000000E-004 4.882812500000000E-004 0.9072267
1.464843750000000E-003 4.882812500000000E-004 1.405174
2.441406250000000E-003 4.882812500000000E-004 24.32851
3.417968750000000E-003 4.882812500000000E-004 101.4136
4.394531250000000E-003 4.882812500000000E-004 199.1388
5.371093750000000E-003 4.882812500000000E-004 1278.898
6.347656250000000E-003 4.882812500000000E-004 1636.955
7.324218750000000E-003 4.882812500000000E-004 1504.590
8.300781250000000E-003 4.882812500000000E-004 814.6337
9.277343750000000E-003 4.882812500000000E-004 273.8610
次のコマンドを使用して、この密度マップをgnuplotでプロットすると:
set palette rgbformulae 34,35,0
set size square
set pm3d map
splot "dens_map.map" u 1:2:(log10($3+10.)) title "Density map"`
これは私にこの美しいイメージを与えます:
今、matplotlibでも同じ結果を得たいと思います。
ここでは、カラーマップの選択や色軸の対数正規化など、より完全な回答を目指しています。
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
x, y, z = np.loadtxt('data.txt', unpack=True)
N = int(len(z)**.5)
z = z.reshape(N, N)
plt.imshow(z+10, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)),
cmap=cm.hot, norm=LogNorm())
plt.colorbar()
plt.show()
ここでは、単純な形状変更によってデータを2次元配列に変換できると想定しています。そうでない場合は、このフォームでデータを取得するために少し努力する必要があります。データがグリッド上にある場合は、pcolormeshではなくimshowを使用する方が効率的です(実際そうです)。上記のコードスニペットは次の画像になります。
@HYRYからのコメントは良いが、完全な最小限の答え(写真付き!)の方が良い。 plt.pcolormesh
import pylab as plt
import numpy as np
# Sample data
side = np.linspace(-2,2,15)
X,Y = np.meshgrid(side,side)
Z = np.exp(-((X-1)**2+Y**2))
# Plot the density map using nearest-neighbor interpolation
plt.pcolormesh(X,Y,Z)
plt.show()
データがサンプルのように見える場合、numpyはコマンド numpy.genfromtext
。