如果一个图是线性的而另一个是对数,则在双Y轴图中两个y轴的刻度间隔是对数

时间:2016-08-26 11:47:33

标签: python-3.x matplotlib

我正在针对固定的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()

enter image description here

1 个答案:

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

enter image description here