6

私はPythonを学んでおり、これが私の最初の質問です。imshowの使用に関連する他のトピックを読みましたが、役立つものは何も見つかりませんでした。私の悪い英語でごめんなさい。

ここに一連のポイントをプロットしました。左の図は次のとおりです。

ポイント (左) とイメージ (右)

ポイントの密度の画像を見たいので、imshowhistogram2dを使用し、前のリンクで右側の画像を取得しました。

画像はポイントの分布に対応していません。これはどのように可能ですか?ヘルプの指示に従い、いくつかのパラメーターを変更しましたが、何も機能しませんでした:(

コードは次のとおりです。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

j, h, k = np.loadtxt("test.dat", usecols=(2, 4, 6), \
    unpack=True)

# límites
xmin = -0.5
xmax =  3.0
ymin = -0.5
ymax =  4.0

# colores
j_h = j - h
h_k = h - k

# no todas las estrellas son graficadas    
x1 = 0.5
y1 = 0.5
b  = 2.2
c  = y1 - b * x1

x = y = np.array([])

for xi, yi in zip(h_k, j_h):
    if xi < (yi - c) / b:
        x = np.append(x, xi)
        y = np.append(y, yi)

# gráfico
fig = plt.figure(figsize=(8, 7))

ax = fig.add_subplot(111)
#ax.plot(x, y, "go")
ax.set_xlabel(r"X", fontsize=14)
ax.set_ylabel(r"Y", fontsize=14)
ax.axis([xmin, xmax, ymin, ymax])

# imagen
rango = [[xmin, xmax], [ymin, ymax]]
binsx = int((xmax - xmin) / 0.05)
binsy = int((ymax - ymin) / 0.05)
binsxy = [binsx, binsy]

H, xedges, yedges = np.histogram2d(x, y, range=rango, bins=binsxy)

extent = [yedges[0], yedges[-1], xedges[0], xedges[-1]]
cp = ax.imshow(H, interpolation='bilinear', extent=extent, cmap=cm.jet)
fig.colorbar(cp)

plt.show()

使用したデータのリンクは次のとおりです。

https://dl.dropbox.com/u/10411539/python/test.dat

どんな助けでも大歓迎です!

4

2 に答える 2

5

別の補間を試し、行列を転置して同じ軸に配置します。

cp = ax.imshow(H.transpose()[::-1], interpolation='nearest', extent=extent, cmap=cm.jet)
于 2012-07-06T18:37:06.060 に答える
4

これはあなたが手に入れたいものですか?x 座標と y 座標を渡したい場合は、pcolor (および pcolormesh) を使用できます。

import urllib
import numpy as np
import matplotlib.pyplot as plt
f = urllib.urlopen('https://dl.dropbox.com/u/10411539/python/test.dat')
j, h, k = np.loadtxt(f, usecols=(2, 4, 6), \
    unpack=True)
j, h, k
j_h = j - h
h_k = h - k
H, xedges, yedges = np.histogram2d(j_h, h_k, bins=100)
plt.pcolor(xedges, yedges, H)

histogram2d を使用した pcolor の例

imshow の場合、最初の次元を逆にする必要があります。これは、imshow が x、y に対してゼロベースの行、列インデックスを使用するためです。上から下に描きます。

plt.imshow(H[::-1,:], extent=(0,5, 0,2.5)) # typed in extent by hand.

imshow の例

于 2012-07-06T18:37:14.347 に答える