You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加facecolor时sharey=True被忽略,如何同时使用这两个参数?

问题描述

使用Matplotlib绘制共享Y轴的子图时,添加facecolor="whitesmoke"参数后,sharey=True的设置失效,两个子图的Y轴不再共享,如何同时实现背景色设置与Y轴共享功能?

原问题代码:

import matplotlib.pyplot as plt
import numpy as np

# 用于展示的示例数据
x1 = np.linspace(0, 2 * np.pi, 400)
x2 = np.linspace(0, 2 * np.pi, 400)
y1 = np.sin(x1 ** 2)
y2 = np.sin(x2 ** 2) 
y2 = y2+1

fig, (ax1, ax2) = plt.subplots(1, 2, sharey = True)
fig.suptitle('Horizontally stacked subplots')
# ax1 = plt.subplot(121)
ax1 = plt.subplot(121, facecolor = "whitesmoke")
ax1 = plt.plot(x1,y1)
# ax2 = plt.subplot(122) 
ax2 = plt.subplot(122, facecolor = "whitesmoke") 
ax2 = plt.plot(x2,y2)
plt.show()
问题原因

代码核心问题是:先用plt.subplots()创建了带共享Y轴的子图对象ax1和ax2,但后续又调用plt.subplot()重新生成新的子图,直接覆盖了之前的共享实例,导致sharey=True的设置完全失效。

解决方案

方案1:直接修改已有子图的背景色

保留plt.subplots()创建的共享子图,调用子图对象的set_facecolor()方法设置背景色:

import matplotlib.pyplot as plt
import numpy as np

# 示例数据
x1 = np.linspace(0, 2 * np.pi, 400)
x2 = np.linspace(0, 2 * np.pi, 400)
y1 = np.sin(x1 ** 2)
y2 = np.sin(x2 ** 2) + 1

# 创建共享Y轴的子图
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
fig.suptitle('横向排列的共享Y轴子图')

# 设置子图背景色
ax1.set_facecolor("whitesmoke")
ax2.set_facecolor("whitesmoke")

# 绘制曲线
ax1.plot(x1, y1)
ax2.plot(x2, y2)

plt.show()

方案2:全局配置子图背景色

如果要给所有子图统一设置背景色,可以在plt.subplots()中通过subplot_kw参数批量配置:

import matplotlib.pyplot as plt
import numpy as np

# 示例数据
x1 = np.linspace(0, 2 * np.pi, 400)
x2 = np.linspace(0, 2 * np.pi, 400)
y1 = np.sin(x1 ** 2)
y2 = np.sin(x2 ** 2) + 1

# 创建共享Y轴且统一背景色的子图
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, subplot_kw={"facecolor": "whitesmoke"})
fig.suptitle('横向排列的共享Y轴子图')

# 绘制曲线
ax1.plot(x1, y1)
ax2.plot(x2, y2)

plt.show()

两种方案都能同时实现Y轴共享和子图背景色设置的需求。

内容的提问来源于stack exchange,提问作者Aristide Herve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:06:32