Matplotlib 防止';黑格力';从取消选择ax1曲线绘制twinx()中的ax2网格线

Matplotlib 防止';黑格力';从取消选择ax1曲线绘制twinx()中的ax2网格线,matplotlib,seaborn,jupyter,Matplotlib,Seaborn,Jupyter,在绘制twinx()绘图时,我遇到了一个问题,无法防止“darkgrid”中的网格线选中与X1轴关联的线。我可以通过不使用'darkgrid'或将空列表传递给X2(并将轴标签丢失到-se最后一行)来“修复”问题,但我确实需要'darkgrid'和X2轴标签 #Some imports import pandas as pd import matplotlib.pyplot as plt import numpy as np import seaborn as sns sns.set_style(

在绘制twinx()绘图时,我遇到了一个问题,无法防止“darkgrid”中的网格线选中与X1轴关联的线。我可以通过不使用'darkgrid'或将空列表传递给X2(并将轴标签丢失到-se最后一行)来“修复”问题,但我确实需要'darkgrid'和X2轴标签

#Some imports
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
sns.set_style("darkgrid")
%matplotlib inline

#Data
d = np.arange(0, 1000, 100)
x1 = d/30         #redmodel
x2 = np.sqrt(d)   #bluemodel

#Figure
fig = plt.figure(figsize = (8, 12))

sy1 = 'r-'        #redmodel
sy2 = 'b-'        #bluemodel

ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()

_ = ax1.plot(x1, d, sy1)
_ = ax1.set_ylabel('D')
_ = ax1.set_ylim(0, 1000)
_ = ax1.set_xlabel('X1')
_ = ax1.set_xlim(0, 31)

_ = ax2.plot(x2, d, sy2)
_ = ax2.set_xlabel('X2')
_ = ax2.set_xlim(0, 31)
#_ = ax2.set_xticks([]) #Empty list passed to omit_xticks, otherwise ax2 gridines disect red line

当我在寻找这个问题的解决方案时,我偶然发现了axes_grid1 toolkit的帮助类集合,它有twin()选项(除了twinx和twiny),这可能是我问题的解决方案。但是,如果你知道一个更简单的问题,请帮我解决。

你的问题的目的是回答,因为挑战是在红线上画x2轴的网格线。我认为您可以简单地为x2轴的网格线设置一个标准

_ = ax2.grid(which='major', axis='x', zorder=1.0)

我很困惑。您可能误解了我的拙劣问题@r-初学者。挑战在于防止网格线分割红线。您的fig是正确的,但是红线没有分段。但是将您提供的行添加到我的代码中没有效果。我的红线仍然被垂直(x2)网格线分割。您对问题的理解是否正确,但我提供的代码仍然没有改进它,或者您使用的是最新版本的MPL?啊,是的,您是,从3.3.1更新到3.3.4,一切都很好。一位相当尴尬的@bjarg感谢您@r-初学者。