我试图使用来自mpl_toolkits.axes_grid1的host_subplot创建一个带有两个y轴的绘图,其中一个是对数的,一个是线性的。该图看起来没问题,但是辅助y轴(右)的次要刻度也显示在图的内侧的主y轴(左)上。
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
host = host_subplot(111)
host.set_yticks(np.arange(-12, -3, 1.0))
par1 = host.twinx()
par1.set_ylim( 2.7040e+3, 1.3552e+7)
par1.set_yscale('log')
minorLocator_x1 = MultipleLocator(0.3333)
minorLocator_y1 = MultipleLocator(0.5)
host.xaxis.set_minor_locator(minorLocator_x1)
host.yaxis.set_minor_locator(minorLocator_y2)
我可以使用:
修复镜像的次对数轴刻度host = host_subplot(111, axes_class=AA.Axes)
但是,这会产生另一个问题,即x轴刻度标签显示在图的内侧,就像x轴标签一样。
关于如何规避问题的任何想法?
答案 0 :(得分:1)
我找到了解决问题的解决方法,但没有使用mpl_toolkits.axes_grid1中的host_subplot。相反,我使用matplotlib轴,如下所示:
fig, ax1 = plt.subplots()
ax1.set_xlim(-0.25, 5.1)
ax1.set_ylim(-3.75, -13)
ax2=ax1.twinx()
ax1.set_xlabel('X-label', fontdict=font)
ax1.set_ylabel('Y1-label$', rotation='horizontal', fontdict=font)
ax2.set_ylabel('Y2-label', rotation='horizontal', fontdict=font)
ax2.set_ylim(2.7040e+3, 1.3552e+7)
ax2.set_yscale('log')
ax1.set_yticks(np.arange(-12, -3, 1.0))
ml = MultipleLocator(0.5)
minorLocator = MultipleLocator(0.3333)
ax1.xaxis.set_minor_locator(minorLocator)
ax1.yaxis.set_minor_locator(ml)
这会产生正确的情节。在我看来,之前的问题是第一种情况下的ticks(set_minor_locator)的模糊分配(不使用host_subplot中的axes_class = AA.Axes)。