没有框架的 Matplotlib 子图面部颜色

Matplotlib subplot face color with no frame

我想在使用 matplotlib 时控制(子)图的表面颜色。

例如,如果我 运行,

tips = sns.load_dataset("tips")
f, ax = plt.subplots(subplot_kw=dict(facecolor=".9"))
sns.scatterplot(data=tips, x="total_bill", y="tip")

我明白了,

其中默认的白色面颜色更改为灰色。 运行 不过,

tips = sns.load_dataset("tips")
rows, cols = 1, 1
f, axs = plt.subplots( rows, cols, subplot_kw=dict(facecolor=".9"))
plt.subplot( rows, cols, 1)
sns.scatterplot(data=tips, x="total_bill", y="tip")

给予,

在每个子图命令中明确设置面部颜色可以解决它,即

tips = sns.load_dataset("tips")
rows, cols = 1, 1
f, axs = plt.subplots( rows, cols)
plt.subplot( rows, cols, 1, facecolor=".9")
sns.scatterplot(data=tips, x="total_bill", y="tip")

但是,当我使用 plt.box( False)

ax = plt.subplot( rows, cols, 1, facecolor = ".9")
ax.set_frame_on( False)

plt.subplot( rows, cols, 1, facecolor = ".9", frame_on = False)

问题returns。看来,没有框架的自定义面部颜色不能满足“配置”。

来自 frame_on 属性 的文档,“设置是否绘制轴矩形面片。”,https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.set_frame_on.html#matplotlib.axes.Axes.set_frame_on。因此,看起来matplotlib添加了一个补丁来改变面部颜色。

是否可以更改此补丁的边缘颜色?我不想要框架的这种“粗”边框线。添加我自己的补丁是唯一的选择吗?

编辑

当我尝试这个时,

tips = sns.load_dataset("tips")
rows, cols = 2, 1
f, axs = plt.subplots( rows, cols, figsize = ( 10, 10), subplot_kw = dict( facecolor = ".9"))
plt.subplot( rows, cols, 1)
sns.scatterplot(data=tips, x="total_bill", y="tip", ax = axs[ 0])
axs[ 0].grid( color = 'w', linewidth = 1)
[ axs[ 0].spines[ s].set_visible( False) for s in axs[ 0].spines.keys()]

我明白了,

问题是我正在调用 plt.subplot() 创建一个新轴覆盖位置 ( rows, cols, 1) 的轴。删除此行即可解决问题。

谢谢。

您可以使用spines

set_visible方法
tips = sns.load_dataset("tips")
rows, cols = 1, 1
f, axs = plt.subplots( rows, cols)
ax = plt.subplot( rows, cols, 1, facecolor=".9")
for s in ax.spines:
  ax.spines[s].set_visible(False)

sns.scatterplot(data=tips, x="total_bill", y="tip")