Python Matplotlib寄生对数轴不需要的镜像

Python Matplotlib寄生对数轴不需要的镜像,python,matplotlib,axis-labels,multiple-axes,Python,Matplotlib,Axis Labels,Multiple Axes,我正在尝试使用mpl_toolkits.axes_grid1中的host_子图,用两个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) h

我正在尝试使用mpl_toolkits.axes_grid1中的host_子图,用两个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轴标签一样


有没有关于如何规避这些问题的想法

我找到了一个解决问题的方法,但不是通过使用mpl_toolkits.axes_grid1中的host_子包。相反,我使用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)

这就产生了正确的情节。在我看来,之前的问题是在第一种情况下(没有在主机子批次中使用轴类=AA.axes)的刻度模糊分配(设置次要定位器)。

您能发布图吗?我不知道你所说的“勾号标签显示在图形内部”是什么意思。嗯,我得到了与你相同的小勾号镜像(这很奇怪…),但你建议使用AA。Axis修复了我的所有问题(x勾号是正常的)。我使用的是matplotlib版本1.3.1,您使用的是哪个版本?我编辑了这篇文章以显示这些数字。我使用的是matplotlib 1.1.1rc(一种集中式软件安装)。谢谢很高兴你成功了!两个版本之间的差异可能意味着x轴行为是在两者之间的某个地方解决的问题。您可能会提交一个错误/功能,用于勾号镜像,我认为这根本不应该发生…:)