原谅我糟糕的蟒蛇技能,我对语言很陌生!
尽管如此,我对目前从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()
第一个图显示(在我看来)正确的行为
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刻度行为,其中两个“曲线”各自得到自己的刻度线。
任何关于为什么会发生这种情况的想法都将不胜感激!
答案 0 :(得分: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()
如果您只想要两条共享相同轴的曲线,只需将它们绘制在相同的轴上即可。 E.g:
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()
答案 1 :(得分: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()
两次,所以你自然会得到两个双轴。由于它们具有不同的比例,因此数字以笨拙的方式重叠。