0

使用 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()

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

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

4

1 回答 1

1

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

考虑以下代码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

在此处输入图像描述

于 2020-11-17T10:34:22.877 回答