8

ここの2番目の例http://www.scipy.org/Plotting_Tutorialと同様の方法で imshow を使用してプロットしたかったのですが、軸のスケールを再定義しました。また、これを行っている間、画像を静止させたいと思います!

例のコード:

from scipy import *
from pylab import *

# Creating the grid of coordinates x,y 
x,y = ogrid[-1.:1.:.01, -1.:1.:.01]

z = 3*y*(3*x**2-y**2)/4 + .5*cos(6*pi * sqrt(x**2 +y**2) + arctan2(x,y))

hold(True)
# Creating image
imshow(z, origin='lower', extent=[-1,1,-1,1])

xlabel('x')
ylabel('y')
title('A spiral !')

# Adding a line plot slicing the z matrix just for fun. 
plot(x[:], z[50, :])

show()

範囲をより広く変更すると、たとえば次のようになります。

imshow(z, origin='lower', extent=[-4,4,-1,1])

次に、結果の画像が引き伸ばされます。しかし、私がやりたかったのは、データと一致するように目盛りを変更することだけでした。pcolor を使用して X および Y データを保存できることはわかっていますが、それには他の影響があります。

すべてのティックを手動でやり直すことができるこの回答を見つけました:

軸の値を変換 (またはスケーリング) し、matplotlib で目盛りの頻度を再定義するにはどうすればよいですか?

しかし、それは少しやり過ぎのようです。

ラベルで表示される範囲のみを変更する方法はありますか?

4

1 に答える 1

11

Aは引数help(imshow)を見つけaspectます。これは、次のように使用すると、少し実験した後、必要なものが得られるようです (スパイラルの正方形の画像ですが、x スケールは -4 から 4 まで、y は -1 から 1 までです)。

imshow(z, origin='lower', extent=[-4,4,-1,1], aspect=4)

しかし、今plotでも -1 から 1 になっているので、それも変更する必要があります...

plot(x[:]*4, z[50, :])

変更が必要な要素がいくつかある場合、代わりに1行の目盛りの再ラベル付けを使用するだけではやり過ぎではないと思います。

xticks(xticks()[0], [str(t*4) for t in xticks()[0]])
于 2012-06-10T15:56:09.037 に答える