具有两个颜色条的多个散点图

时间:2019-05-10 15:35:40

标签: python matplotlib colorbar

我正在尝试制作一个包含三个散点图的图,每个散点图显示两种数据。我想显示对应于此数据的颜色条(即,分别表示橙色和紫色阴影)。我知道如何制作带有多个颜色条的单个图,我知道如何制作具有公共色条的多个图,但是我不知道如何在多个子图上放置多个颜色条。

以下是制作多个绘图的示例:

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)

我假设所有散点图的公共vminvmax值都保持固定,可以确保各图之间的比例一致。

2 个答案:

答案 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()

enter image description here

为使外观更好一点,最好将每个颜色条放置在其各自的轴上。

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()

enter image description here

答案 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()

这是我想要的图像:

enter image description here