【问题标题】:Multiple scatter plots with two colorbars带有两个颜色条的多个散点图
【发布时间】:2019-09-28 13:12:51
【问题描述】:

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

这里是制作多个图的示例:

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 值可确保图之间的比例一致。

【问题讨论】:

  • 什么应该代表颜色条?每个颜色数据集的范围值?
  • 是的,它应该显示每个子图中两个散点图的值范围。

标签: python matplotlib colorbar


【解决方案1】:

好的,所以看起来像在代码中添加以下内容:

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

这是我正在寻找的视觉效果:

【讨论】:

    【解决方案2】:

    如果要为每个子图添加颜色条,请在 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()
    

    【讨论】:

    • 不,我实际上希望所有三个图都有两个公共颜色条(即 3 个散点图 + 2 个颜色条)。
    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2011-07-26
    • 2019-03-22
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多