Seaborn:使用 lmplot 时如何在所有绘图中指定绘图次要刻度线和网格线?

Seaborn: How to specify plot minor ticks and gridlines in all plots when using lmplot?

我正在尝试在使用 lmplot 时在所有绘图中绘制小刻度线和网格线,使用以下代码:

sns.set(context="notebook", style='white', font_scale=2)

g=sns.lmplot(data=data ,
             x="x", 
             y="y",
             col="item",   # or use rows to display xplots in rows (one on top of the other)
             fit_reg=False,
             col_wrap=2,
             scatter_kws={'linewidths':1,'edgecolor':'black', 's':100}
            )

g.set(xscale='linear', yscale='log', xlim=(0,0.4), ylim=(0.01, 10000))

for ax in g.axes.flatten():
    ax.tick_params(axis='y', which='both', direction='out', length=4, left=True)
    ax.grid(b=True, which='both', color='gray', linewidth=0.1)
    
for axis in [ax.yaxis, ax.xaxis]:
    formatter = FuncFormatter(lambda y, _: '{:.16g}'.format(y))
    axis.set_major_formatter(formatter)

sns.despine()

g.tight_layout()

# Show the results
plt.show()

到目前为止,所有绘图中仅显示主要刻度线和网格线。

感谢您提供解决此问题的任何建议

你的代码对我来说工作得很好。 我认为问题是当主要标签太大时,matplotlib 选择不显示次要刻度线,因此不显示次要网格线。您可以更改 font_scale,或增加图形的大小(请参阅 lmplot() 中的 height=

考虑以下代码 font_scale=1

tips = sns.load_dataset('tips')

sns.set(context="notebook", style='white', font_scale=1)
g = sns.lmplot(x="total_bill", y="tip", col="day", hue="day",
               data=tips, col_wrap=2, height=3)

g.set(xscale='linear', yscale='log')
for ax in g.axes.flatten():
    ax.tick_params(axis='y', which='both', direction='out', length=4, left=True)
    ax.grid(b=True, which='both', color='gray', linewidth=0.1)
    
for axis in [ax.yaxis, ax.xaxis]:
    formatter = matplotlib.ticker.FuncFormatter(lambda y, _: '{:.16g}'.format(y))
    axis.set_major_formatter(formatter)

sns.despine()

g.tight_layout()

# Show the results
plt.show()

与使用font_scale=2

的结果进行比较