3

请原谅我糟糕的 Python 技能,我对这门语言还很陌生!

尽管如此,我对我twinx()目前得到的结果感到困惑。我不知道为什么当我双 x 轴时,右侧 y 轴上的刻度似乎加倍。

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()

而第二个图(我所做的只是翻转轴)似乎具有较差的 y 刻度行为,其中两条“曲线”各有自己的刻度线。 右 y 轴

任何关于为什么会发生这种情况的想法将不胜感激!

4

2 回答 2

2

因为那twinx是应该做的:)

不过,说真的,重点twinx是在同一个图上创建一个独立的 y 轴。默认情况下,它会在绘图右侧显示第二个独立 y 轴的刻度。

这个想法是你可以使用twinx(或者twiny如果你想要两个独立的 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()

在此处输入图像描述

如果您只想要两条共享相同轴的曲线,只需将它们绘制在相同的轴上即可。例如:

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 回答
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()了两次,所以你自然会得到两个孪生轴。由于它们具有不同的比例,因此数字以一种尴尬的方式重叠。

于 2013-01-08T20:39:19.150 回答