5

以前は別々だった 2 つの図を結合しようとしています。1 つは 3 パネルの図 (ax1、ax2、ax3) (すべて で生成imshow) で、側面に 1 つのカラーマップを使用していました。imreadここで、とget_sample_data(から)を使用して、png ファイルから読み込む別の図 (ax0) を追加したいと思いますmatplotlib.cbook

問題は、この新しい図が 3 つのパネルからのものと同じカラーマップを使用するため、新しく追加されたパネルで 1 つの単純な均一な色が生成されることです。他の 3 つのパネルはまだ適切な色です。

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

g1 = gridspec.GridSpec(4, 1, height_ratios=[4,1,1,1])
g1.update(wspace=0.05, hspace=0.2) # set the spacing between axes.

f, ((ax0), (ax1), (ax2), (ax3)) = plt.subplots(4, 1, sharex='col', sharey='row')

ax0 = subplot(g1[0])
ax1 = subplot(g1[1])
ax2 = subplot(g1[2])
ax3 = subplot(g1[3])

from matplotlib.cbook import get_sample_data
im2 = plt.imread(get_sample_data('PathToFig/Figure.png'))
ax0.imshow(im2, vmax=1)

ziAA = np.random.rand(4, 4, 4)
ziAB = np.random.rand(4, 4, 4)
ziBA = np.random.rand(4, 4, 4)

ax1.imshow(ziAA,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
ax2.imshow(ziAB,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
im = ax3.imshow(ziBA,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])

from matplotlib import ticker
tick_locator = ticker.MaxNLocator(nbins=5)

f.subplots_adjust(right=0.85)

cbar_ax = f.add_axes([1.0, 0.15, 0.01, 0.7])
cbar = f.colorbar(im, cax=cbar_ax)

cbar.locator = tick_locator
cbar.update_ticks()
cbar.solids.set_rasterized(True)
cbar.solids.set_edgecolor("face")

ziABziBAおよび以前の補間呼び出しziAAで生成されました。griddata

imshow各呼び出し内で 2 つの異なるカラーマップを指定してみました。 の値を変更してみましたvmax。しかし、無駄に...

-のax0後に置くと、適切な色を取得するのは ax0 であり、-ではありません。ax13ax13

マスクされた配列または独自のカラーマップの作成について話している他の同様の質問 (同じ imshow matplotlib 内の 2 つの異なるカラー カラーマップpng) を見てきましたが、ax0 のファイルの起源のために、どのように進めるべきかがよくわかりません。 .

編集 :

おもちゃデータ:

ziAA = np.random.rand(4, 4, 4)
ziAB = np.random.rand(4, 4, 4)
ziBA = np.random.rand(4, 4, 4)

おもちゃの png フィギュア:

おもちゃ画像

この図では、均一な色は白になります。私の実際の姿は均一な赤を与えます。これは、vmin、vmax、およびおそらく他の制御パラメーターを適切に調整することにより、png の図が適切に表示されるようになる可能性があることを示唆しています。ただし、任意の png フィギュアで機能するものに興味があります...

4

1 に答える 1

1

と:

im0 = ax0.imshow(im2, aspect='auto',extent=[-0.15,0.15,0,4])

次の結果が生成されます。

ここに画像の説明を入力

于 2015-12-07T20:07:56.183 に答える