我正在针对固定的x轴绘制两个分别称为line1和line2的numpy数组。使用 semilogy 在一个对数图中绘制一个阵列,并在同一x轴上绘制另一个阵列的基本线性图。
两个y轴的缩放格式似乎都很好。然而,右侧线性图(线2)的y轴刻度间隔和刻度似乎是对数(具有间隔很小的刻度),我似乎无法找到改变它的方法。
有没有办法将下图中的右y轴更改为线性?
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0.01, 10.0, 0.01)
y = np.exp(x)
y2 = np.sin(2*np.pi*x)
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
line1 = ax1.semilogy(x,y)
ax2 = fig1.add_subplot(111, sharex=ax1, frameon=False)
line2 = ax2.plot(x,y2,"r")
#MATPLOTLIB BUG? THE SECOND Y AXES HAS A LOG SCALE AND THE TICK LABELS CAN'T BE CHANGED
ax2.set_yscale('linear')
ax2.yaxis.tick_right()
plt.show()
答案 0 :(得分:2)
再次使用ax2 = ax1.twinx()
代替add_subplot
。这将把新轴上的y刻度与旧轴上的y刻度分开。来自文档:
twinx()
创建一对Axes,用于生成具有sharex x轴但独立y轴的绘图。自我的y轴在左边有刻度,返回的轴在右边有刻度。
您也不需要将yscale
设置为linear
,也可以将刻度向右移动,因为twinx
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0.01, 10.0, 0.01)
y = np.exp(x)
y2 = np.sin(2*np.pi*x)
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
line1 = ax1.semilogy(x,y)
ax2 = ax1.twinx() # <-- Note the change to twinx here
line2 = ax2.plot(x,y2,"r")
plt.show()