Python:为每行子图绘制不同的图形背景颜色
Python: Plot Different Figure Background Color For Each Row of Subplots
我有一个包含 9 个同位图的图(3 行 x 3 列)。我想为每一行绘制不同颜色的图形背景颜色(不是子图!)。这是我目前所拥有的:
# Imports
import matplotlib.pyplot as plt
import numpy as np
# Plot the Figure
fig, axes = plt.subplots(nrows=3, ncols=3, figsize=(9, 9))
for r in np.arange(3):
for c in np.arange(3):
axes[r, c].plot(np.arange(10), np.random.randint(10, size=10))
if r == 0:
axes[r, c].patch.set_facecolor('azure')
if r == 1:
axes[r, c].patch.set_facecolor('hotpink')
if r == 2:
axes[r, c].patch.set_facecolor('lightyellow')
plt.show()
这张图是错误的,因为它为每个子图中的背景着色。但我想要的是为每一行不同地着色图形背景(子图之外)。我该怎么做?
是这样的吗?
fig, axes = plt.subplots(nrows=3, ncols=3, figsize=(9, 9))
for r in np.arange(3):
for c in np.arange(3):
axes[r, c].plot(np.arange(10), np.random.randint(10, size=10))
colors = ['azure','hotpink','lightyellow']
for ax,color in zip(axes[:,0],colors):
bbox = ax.get_position()
rect = matplotlib.patches.Rectangle((0,bbox.y0),1,bbox.height, color=color, zorder=-1)
fig.add_artist(rect)
plt.show()
matplotlib.__version__<3.0
的代码
以下代码适用于旧版本的 matplotlib,其中 Figure.add_artist()
不存在。但是,我发现将矩形添加到其中一个轴会导致该轴背景补丁出现问题,因此我必须隐藏所有背景以获得一致的外观。
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np
fig, axes = plt.subplots(nrows=3, ncols=3)
for r in np.arange(3):
for c in np.arange(3):
axes[r, c].plot(np.arange(10), np.random.randint(10, size=10))
fig.tight_layout()
colors = ['azure','hotpink','lightyellow']
for ax,color in zip(axes[:,0],colors):
bbox = ax.get_position()
rect = Rectangle((0,bbox.y0),1,bbox.height, color=color, zorder=-1, transform=fig.transFigure, clip_on=False)
ax.add_artist(rect)
for ax in axes.flat:
ax.patch.set_visible(False)
plt.show()
我有一个包含 9 个同位图的图(3 行 x 3 列)。我想为每一行绘制不同颜色的图形背景颜色(不是子图!)。这是我目前所拥有的:
# Imports
import matplotlib.pyplot as plt
import numpy as np
# Plot the Figure
fig, axes = plt.subplots(nrows=3, ncols=3, figsize=(9, 9))
for r in np.arange(3):
for c in np.arange(3):
axes[r, c].plot(np.arange(10), np.random.randint(10, size=10))
if r == 0:
axes[r, c].patch.set_facecolor('azure')
if r == 1:
axes[r, c].patch.set_facecolor('hotpink')
if r == 2:
axes[r, c].patch.set_facecolor('lightyellow')
plt.show()
这张图是错误的,因为它为每个子图中的背景着色。但我想要的是为每一行不同地着色图形背景(子图之外)。我该怎么做?
是这样的吗?
fig, axes = plt.subplots(nrows=3, ncols=3, figsize=(9, 9))
for r in np.arange(3):
for c in np.arange(3):
axes[r, c].plot(np.arange(10), np.random.randint(10, size=10))
colors = ['azure','hotpink','lightyellow']
for ax,color in zip(axes[:,0],colors):
bbox = ax.get_position()
rect = matplotlib.patches.Rectangle((0,bbox.y0),1,bbox.height, color=color, zorder=-1)
fig.add_artist(rect)
plt.show()
matplotlib.__version__<3.0
的代码以下代码适用于旧版本的 matplotlib,其中 Figure.add_artist()
不存在。但是,我发现将矩形添加到其中一个轴会导致该轴背景补丁出现问题,因此我必须隐藏所有背景以获得一致的外观。
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np
fig, axes = plt.subplots(nrows=3, ncols=3)
for r in np.arange(3):
for c in np.arange(3):
axes[r, c].plot(np.arange(10), np.random.randint(10, size=10))
fig.tight_layout()
colors = ['azure','hotpink','lightyellow']
for ax,color in zip(axes[:,0],colors):
bbox = ax.get_position()
rect = Rectangle((0,bbox.y0),1,bbox.height, color=color, zorder=-1, transform=fig.transFigure, clip_on=False)
ax.add_artist(rect)
for ax in axes.flat:
ax.patch.set_visible(False)
plt.show()