我正在尝试绘制一个包含三个散点图的图,每个散点图显示两种数据。我想显示与此数据对应的颜色条(即,分别显示橙色和紫色的阴影)。我知道如何用多个颜色条制作一个图,我知道如何用一个公共(public)颜色条制作多个图,但我不知道如何将多个颜色条放在一个有多个子图的图上。
这里是制作多图的例子:
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=3)
images =[]
for i in range(3):
images.append([axes[i].scatter(np.random.random(10), np.random.random(10), c = np.random.random(10), vmin=0, vmax=1, cmap="Purples_r"),
axes[i].scatter(np.random.random(10),np.random.random(10), c =
np.random.random(10), vmin=0, vmax=1, cmap="Oranges_r")])
plt.show()
更新:添加以下代码会返回两个颜色条:
fig.colorbar(images[0][1], ax=axes, fraction=.05)
fig.colorbar(images[0][2], ax=axes, fraction=.05)
我假设为所有散点图保持固定的通用 vmin
和 vmax
值可确保各图之间的比例一致。
最佳答案
如果您想为每个子图添加一个颜色条,请在 for
循环中添加对 fig.colorbar
的调用。如果每个子图中的数据不在同一范围内,这可能很有用。例如,在子图 1 中,它们从 0 到 1,在子图 2 中,它们从 0 到 2,等等。
这里有一个例子:
fig, axes = plt.subplots(nrows=1, ncols=3)
images =[]
for i in range(3):
images.append([axes[i].scatter(np.random.random(10), np.random.random(10), c =
(1+i)*np.random.random(10), vmin=0, vmax=1+i, cmap="Purples_r"),
axes[i].scatter(np.random.random(10),np.random.random(10), c =
(1+i)*np.random.random(10), vmin=0, vmax=1+i, cmap="Oranges_r")])
fig.colorbar(images[-1][0], ax=axes[i])
fig.colorbar(images[-1][1], ax=axes[i])
plt.show()
为了让事情变得更好,最好将每个颜色条放在自己的轴上。
wrl = [1, 4, 1] * 3
fig, axes = plt.subplots(nrows=1, ncols=9, gridspec_kw={'width_ratios': wrl})
images =[]
for i in range(3):
leftaxpos = i*3
plotpos = (i*3)+1
rightaxpos = (i*3)+2
images.append([axes[plotpos].scatter(np.random.random(10), np.random.random(10), c =
(1+i)*np.random.random(10), vmin=0, vmax=1+i, cmap="Purples_r"),
axes[plotpos].scatter(np.random.random(10),np.random.random(10), c =
(1+i)*np.random.random(10), vmin=0, vmax=1+i, cmap="Oranges_r")])
fig.colorbar(images[-1][0], cax=axes[leftaxpos])
fig.colorbar(images[-1][1], cax=axes[rightaxpos])
plt.show()
关于python - 具有两个颜色条的多个散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56080777/