0

私もこれを希望どおりに機能させるのに苦労し続けていますが、正しい方法で取得できないようです。問題は次のとおりです.pylab.figureに表示しようとしているx、yの関数によって生成された2Dデータがあります。

入力データは次のようになります。

range1_labels = [0.002, 0.006, 0.010, 0.014, 0.018]
range2_labels = [10, 25, 80]
data_values = 2d array with dimensions (len(x_values), len(y_values))

これから scipy の RectBivariateSpline を使用して、pylab.figure に表示したい 600 x 600 の値を生成しますが、これらの間隔で x 軸と y 軸のラベルの値を持っています。これまでに行われた試み:

    axes = figure.gca()
    img = axes.matshow(posteriori_data)
    axes.set_title("Interpolated values") 
    figure.colorbar(img)

    axes.set_yticks(range(len(range2_labels)), range2_labels)
    axes.set_xticks(range(len(range1_labels)), range1_labels)

この試行でも、両方の軸に [0、100、200、300、400、500] というラベルが付けられます。

私が試みる別のことは次のとおりです。

    axes = figure.gca()
    img = axes.matshow(posteriori_data, extent=(min(range1_labels), max(range1_labels),
                                                min(range2_labels), max(range2_labels)),
                       aspect='auto')
    axes.set_title("Interpolated values") 
    figure.colorbar(img)

これは私が望むものに近いようです。「大きい」軸の場合、ラベルは適切に生成され、ズームしても適切に再計算されます。したがって、上記の例では、範囲 2 のラベルは期待どおりに表示されますが、範囲 1 のラベルは生成されません。

ポインタはありますか?

よろしく

4

1 に答える 1

1

あなたの問題は、範囲が小さすぎて、ティックロケーターがこれにうまく対処していないことです。

何かのようなもの:

data = rand(600,600)
extent = [.002, .018, 10, 80]

ax = gca()
ax.matshow(data, extent=extent, aspect='auto')
ax.get_xaxis().set_major_locator(matplotlib.ticker.LinearLocator(5))

plt.draw()

あなたが望むことをします。

これを少し掘り下げて、何が起こっているように見えるのか、matshow行列を表示するために調整された関数を使用しています。設定するロケーターは、整数値 ( doc )のみに目盛りを付けるように強制MaxNLocatorするフラグを持つです。行列をプロットする場合、これは理にかなっています。あなたの場合、エクステントを範囲内で1未満に設定しているため、ティックは発生しません。integer

別の解決策は使用することですimshow

data = rand(600,600)
extent = [.002, .018, 10, 80]

ax = gca()
ax.imshow(data, extent=extent, aspect='auto', interpolation='nearest')

plt.draw()

これはmatshow実際に行うことです ( src )。保持したい機能をその実装からコピーし、不要なものを削除できます。

于 2013-04-19T14:58:50.917 に答える