Python 在辅助轴上绘制网格线-Matplotlib 问题

Python 在辅助轴上绘制网格线-Matplotlib 问题,python,matplotlib,Python,Matplotlib,我正试图从我的第二个轴的记号中用 ax2.grid(color=color,linestyle='--') 数字上没有显示任何内容,我相信我的情况与for相同,不是吗 然而,有没有人能在不改变规模的情况下解决这个问题?我的意思是,通过反转比例,在主轴上有百分比比例,在次轴上有正常比例 完整代码 输出 我在这个主题上做了一些挖掘,并在GitHub上打开了一个。以下是我发现的: SecondaryAxis是matplotlib 3.1.0中添加的“非常新的东西”。(2019年5月)。甚至连科学家

我正试图从我的第二个轴的记号中用

ax2.grid(color=color,linestyle='--')
数字上没有显示任何内容,我相信我的情况与for相同,不是吗

然而,有没有人能在不改变规模的情况下解决这个问题?我的意思是,通过反转比例,在主轴上有百分比比例,在次轴上有正常比例

完整代码 输出

我在这个主题上做了一些挖掘,并在GitHub上打开了一个。以下是我发现的:

  • SecondaryAxis是matplotlib 3.1.0中添加的“非常新的东西”。(2019年5月)。甚至连科学家都认为
    secondary_xaxis()
    方法是实验性的
  • SecondaryAxis
    继承自
    \u AxesBase
    ,它是一个“”。不应该(从v.3.3.3开始)将其用作
    对象,并且
    辅助轴.grid()
    不应该绘制任何东西(如
    \u AxesBase.grid()
    所做的)。尽管如此,我同意有一种不起作用的方法是错误的
  • 因此,在编写本文时,
    .grid()
    仅被假定在原始轴上工作
使蓝色轴成为主要轴
  • 由于
    .grid()
    仅在非次轴上工作,因此将主轴设为蓝色,并将其移到顶部和右侧
代码
#获取x和y记号,以便将其传输到次轴
xticks\u orig=ax1.get\u xticks()
yticks\u orig=ax1.get\u yticks()
#使主轴为蓝色,因为我们要在其上绘制栅格
ax1.xaxis.tick_top()
ax1.yaxis.tick_right()
ax1.set_xticks(xticks)
ax1.设置_yticks(yticks)
ax1.设置标签(标签=每个标签)
ax1.设置标签(标签=每个标签)
ax1.勾选参数(axis=“both”,color=color,labelcolor=color)
ax1.网格(颜色=颜色,线型=“”)
#绘制黑色的次轴
ax2=ax1。辅助轴(“左”)
ax3=ax1.次级轴(“底部”)
ax2.set_yticks(yticks_orig)
ax3.set_xticks(xticks_orig)

手动添加轴网线 您也可以手动添加网格线,如下所示

xlim=ax1.get\u xlim()
对于ax2中的y。获取\u yticks():
ax1.绘图(xlim,(y,y),ls=“--”,color=color,lw=0.5)
ax1.set_xlim(xlim)
ylim=ax1.get_ylim()
对于ax3中的x。获取\u xticks():
ax1.绘图((x,x),ylim,ls=“--”,color=color,lw=0.5)
ax1.set_ylim(ylim)
输出如下所示:


这里的区别是,我们现在在图上画的线看起来像网格线。

要添加np8的答案,您也可以使用来画线。这样做的优点是,您不需要手动跟踪y限制:

for x in ax2.get_xticks():
    ax1.axvline(x, color=color, zorder=-1, linestyle="--", linewidth=0.5)
还请注意,您需要适当地变换x坐标,以匹配从ax1到ax2的变换

此外,在我的例子中,我首先必须渲染画布,以便生成记号标签:

fig1.canvas.draw()

很有魅力,非常感谢。但是,我将保留这个问题,看看是否有人知道为什么grid()不能在SecondaryAxis上工作。添加了SecondaryAxis.grid()不能工作的解释,以及其他替代解决方法。
fig1.canvas.draw()