没有框架的 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")
我想在使用 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")