3

私の貧弱なPythonスキルを許してください、私は言語にかなり慣れていません!

それでも、私はtwinx()現在得ている結果に混乱しています。x軸を双子にすると、右側のy軸の目盛りが2倍に見える理由がわかりません。

import matplotlib.pyplot as plt

x = linspace(0,2*pi,100)
y = sin(x) + 100*rand(len(x))
z = cos(x) + 100*rand(len(x))
data = []
data.append(y)
data.append(z)

fig = plt.figure(1)
for kk in range(len(data)):
    ax1 = fig.add_subplot(111)
    ax1.plot(x.T, data[kk], 'b.-')

plt.show()

最初のプロットは(私の考えでは)正しい動作を示しています 左Y軸

fig2 = plt.figure(2)
for kk in range(len(data)):
    ax3 = fig2.add_subplot(111)
    ax4 = ax3.twinx()
    ax4.plot(x.T, data[kk], 'b.-')

plt.show()

2番目のプロット(私が行ったのは軸を反転することだけです)は、2つの「曲線」がそれぞれ独自の目盛りを取得するy目盛りの動作が悪いようです。 右y軸

なぜこれが起こっているのかについての考えは大歓迎です!

4

2 に答える 2

2

ループを呼び出したり、ループから抜けtwinx()たりすると、目的add_subplot()の数値が得られると思います。そのようです:

fig2 = plt.figure(2)
ax3 = fig2.add_subplot(111)
ax4 = ax3.twinx()
for kk in range(len(data)):
    ax4.plot(x.T, data[kk], 'b.-')

plt.show()

ループの終わりまでにtwinx()2 回呼び出しているため、当然 2 つの対になった軸が得られます。スケールが異なるため、数字がぎこちなく重なっています。

于 2013-01-08T20:39:19.150 に答える
2

それがtwinxやるべきことだからです:)

ただし、真剣に、ポイントはtwinx同じプロットに独立した y 軸を作成することです。デフォルトでは、プロットの右側にある 2 番目の独立した y 軸の目盛りが表示されます。

twinxアイデアは、 (またはtwiny2 つの独立した x 軸が必要な場合) を使用して、次のようなことができるということです。

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax2 = ax.twinx()

x = np.linspace(0, 10, 100)

ax.plot(x, np.sin(x), color='blue')
ax.set_ylabel(ylabel='Y-Value 1', color='blue')
ax.set_xlabel('Same X-values')

ax2.plot(x, x**3, color='green')
ax2.set_ylabel('Y-Value 2', color='green')

plt.show()

ここに画像の説明を入力

同じ軸を共有する 2 つの曲線だけが必要な場合は、それらを同じ軸にプロットします。例えば:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

x = np.linspace(0, 10, 100)
ax.plot(x, x, label='$y=x$')
ax.plot(x, 3 * x, label='$y=3x$')
ax.legend(loc='upper left')

ax.set(xlabel='Same X-values', ylabel='Same Y-values')

plt.show()

ここに画像の説明を入力

于 2012-12-16T16:35:32.807 に答える