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
的结果进行比较
我正在尝试在使用 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