3

散布図(X対Y、Zで正規化された色)を2D「ピクセル」画像に変換する方法を探しています。つまり、ピクセルが3番目の変数に従って色付けされているピクセル化された画像をプロットするにはどうすればよいですか?

私の場合、銀河のリストがあり、それぞれが空の座標(X、Y)と距離(Z)を持っています。X対Yのピクセル化された画像を作成し、ピクセルの色をZに従って正規化します(たとえば、そのピクセル内の銀河のZ値の中央値)。

六角形でこのようなことができることは知っていますが、六角形ではなく正方形のピクセルが必要です。(imshowが生成するものに似たもの)。

私はまだPythonを学んでいるので、これを行うための簡単で迅速な方法(または複雑な方法でそれを行う方法の明確な指示!)があれば、それは素晴らしいことです。

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

4

1 に答える 1

2

わかりました-これを行うには2つの方法があります。1つは、距離に応じて目立たない数のビンを用意することです(d <10pc、10pc <d <20pc、d> 20pcなど)。これは比較的簡単です。必要なのはいくつかのループだけです。これは3の例です。

raclose = []
ramid = []
rafar = []
decdlose = []
decmid = []
decfar = []

for ii in range(len(dist)):
  if dist[ii] < 10.:
    raclose.append(ra[ii])
    decclose.append(dec[ii])
  elif dist[ii] > 20.:
    rafar.append(ra[ii])
    decfar.append(dec[ii])
  else:
    ramid.append(ra[ii])
    decmid.append(dec[ii])

plt.clf
ax1 = scatter(raclose, decclose, marker='o', s=20, color="darkgreen", alpha=0.6)
ax2 = scatter(ramid, decmid, marker='o', s=20, color="goldenrod", alpha=0.6)
ax3 = scatter(rafar, decfar, marker='o', s=20, color="firebrick", alpha=0.6)
line1 = Line2D(range(10), range(10), marker='o', color="darkgreen")
line2 = Line2D(range(10), range(10), marker='o',color="goldenrod")
line3 = Line2D(range(10), range(10), marker='o',color="firebrick")
plt.legend((line1,line2,line3),('d < 10pc','20pc > d > 10pc', 'd > 20pc'),numpoints=1, loc=3)
show()

または、x軸にRA、y軸にDecを指定し、プロットに距離を入力するように、等高線図を作成することもできます。RAとDecはどちらも、それぞれの座標を持つ1D配列です。次に、距離を使用して2D配列を作成します。距離の中央値/平均値を決定し、2D配列をその値で割って正規化します。最後に、次のような等高線図(contourfまたはimshowを使用)を使用してプロットします。

import matplotlib.pyplot as plt
from matplotlib import cm
ax = pylab.contourf(RA,Dec,dists, levels=[1, 5, 10, 15], cmap=plt.cm.spectral)
cbar=pylab.colorbar()
于 2011-11-03T00:40:34.100 に答える