我正在尝试制作一个包含三个散点图的图,每个散点图显示两种数据。我想显示对应于此数据的颜色条(即,分别表示橙色和紫色阴影)。我知道如何制作带有多个颜色条的单个图,我知道如何制作具有公共色条的多个图,但是我不知道如何在多个子图上放置多个颜色条。
以下是制作多个绘图的示例:
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
值都保持固定,可以确保各图之间的比例一致。
答案 0 :(得分:1)
如果要为每个子图添加一个颜色条,请在fig.colorbar
循环内向for
添加一个调用。如果每个子图中的数据不在同一范围内,这可能很有用。例如,在子图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()
答案 1 :(得分:0)
好,所以似乎在代码中添加了以下内容:
fig.colorbar(images[0][0], ax=axes, fraction=.05)
fig.colorbar(images[0][1], ax=axes, fraction=.05)
我昨天尝试过此方法,但没有用,我的笔记本内存中肯定有东西。
为了完整起见,下面是完整的代码:
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12, 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")])
fig.colorbar(images[0][0], ax=axes, fraction=.05)
fig.colorbar(images[0][1], ax=axes, fraction=.05)
plt.show()
这是我想要的图像: