3

このペーパーの図 5に示すように、カラーマップを使用してスタック プロットを描画したいと思います。ここに同じスクリーンショットがあります

ここに画像の説明を入力

現在、同様の性質の散布図を描くことができます。

ここに画像の説明を入力

この散布図をカラーマップ付きのスタック プロットに変換したいと思います。私はこれを行うためのアイデアに少し迷っています。私の最初の推測では、(x,y) ポイントごとに、カラーマップ スペクトル上の z ポイントのリストが必要です。しかし、これにはもっと簡単な方法があるのではないかと思います。カラーマップで散布図を生成するコードは次のとおりです

cm = plt.cm.get_cmap('RdYlBu')
plt.xscale('log')
plt.yscale('log')
sc = plt.scatter(x, y, c=z, marker ='x', norm = matplotlib.colors.Normalize(vmin= np.min(z), vmax=np.max(z)), s=35, cmap=cm)
plt.colorbar(sc)
plt.show()

編集

カラーバーの各ビンに1つずつ、z-array複数に変換する方法を見つける必要があると感じています。z-arrays次に、これらの派生した から積み上げ面グラフを簡単に作成できますz-arrays

編集 2

私はRutger のコードに従い、私のデータに対してこのグラフを作成することができました。軸の制限に問題があるのはなぜだろうか。

ここに画像の説明を入力

4

1 に答える 1

3

あなたの例から、scatterplotあなたには多くのポイントがあるようです。これらを個別のデータとしてプロットすると、データの大部分が隠され、「上位」のデータのみが表示されます。これは悪い習慣であり、これほど多くのデータがある場合、集計を行うと視覚的な表現が改善されます。

bin以下の例は、2D ヒストグラムを使用してデータを平均化する方法を示しています。データを視覚表示に適した形式にすると、結果を画像または等高線としてプロットするのは非常に簡単です。

プロットする前にデータを集計すると、パフォーマンスが向上し、Array Too Bigメモリ関連のエラーが防止されます。

fig, ax = plt.subplots(1, 3, figsize=(15,5), subplot_kw={'aspect': 1})

n = 100000

x = np.random.randn(n)
y = np.random.randn(n)+5
data_values = y * x

# Normal scatter, like your example
ax[0].scatter(x, y, c=data_values, marker='x', alpha=.2)
ax[0].set_xlim(-5,5)


# Get the extent to scale the other plots in a similar fashion
xrng = list(ax[0].get_xbound())
yrng = list(ax[0].get_ybound())

# number of bins used for aggregation
n_bins = 130.

# create the histograms
counts, xedge, yedge = np.histogram2d(x, y, bins=(n_bins,n_bins), range=[xrng,yrng])
sums, xedge, yedge = np.histogram2d(x, y, bins=(n_bins,n_bins), range=[xrng,yrng], weights=data_values)

# gives a warning when a bincount is zero
data_avg = sums / counts

ax[1].imshow(data_avg.T, origin='lower', interpolation='none', extent=xrng+yrng)

xbin_size = (xrng[1] - xrng[0])  / n_bins # the range divided by n_bins
ybin_size = (yrng[1] - yrng[0])  / n_bins # the range divided by n_bins

# create x,y coordinates for the histogram
# coordinates should be shifted from edge to center
xgrid, ygrid = np.meshgrid(xedge[1:] - (xbin_size / 2) , yedge[1:] - (ybin_size / 2))

ax[2].contourf(xgrid, ygrid, data_avg.T)

ax[0].set_title('Scatter')
ax[1].set_title('2D histogram with imshow')
ax[2].set_title('2D histogram with contourf')

ここに画像の説明を入力

于 2013-12-03T08:56:42.863 に答える