添加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
相关产品推荐
相关产品推荐

