python - 将颜色条作为图例添加到 matplotlib 散点图(多个子图,多个散点图)

标签 python matplotlib legend colorbar scatter

我有几个子图,我想向其中添加单个颜色条。每个子图由 7 个散点组成。我找到了有关如何添加颜色条的建议,但它们主要与每个散点的值相关,而不是与行本身相关。

代表性示例代码:

import numpy as np
from matplotlib import pyplot as plt

x = range(50)
scales = np.linspace(0, 2, 7)
locs = range(4)
cmap = plt.get_cmap("Spectral")
for s_plot in range(4):
    plt.subplot(2, 2, s_plot+1)
    color = iter(cmap(np.linspace(0, 1, len(scales))))
    for scale in scales:
        c = next(color)
        y = np.random.normal(loc=locs[s_plot], scale=scale, size=50)
        plt.scatter(x, y, c=c, s=5)
        plt.title("Mean = {:d}".format(locs[s_plot]))
plt.subplots_adjust(hspace=0.4)
plt.show()

上面的例子给出: enter image description here

我想要的颜色条如下所示(假的,放置在绘图旁边):

enter image description here

因此,颜色条并不描绘我的散点的值,而是描绘迭代的不同“行”(在本例中:不同的比例)。在示例中,这将有助于将点与比例相匹配。

我尝试的是一个简单的

plt.colorbar()

在完成每个子图后调用一次。但我得到 类型错误:您必须首先为可映射设置_array 另外,由于我想为其创建颜色图的不同比例,我也尝试了

plt.colorbar(scales) 

返回:AttributeError:'numpy.ndarray'对象没有属性'autoscale_None'

我目前缺乏关于如何进行此操作的指导。 编辑:我被标记为可能重复的 matplotlib colorbar for scatter 。我已经发现了这个问题,但这对解决我的问题没有帮助。就我而言,我需要一个独立于 z 值的颜色图,但只会指示“行号”或“散点行”或您想要的名称(相当于 中的“行”) plt.plot)。

最佳答案

颜色条需要一个ScalarMappable作为输入。因此,如果您在情节中创建的任何内容都不适合于此,您可以自己创建。

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.cm import ScalarMappable

x = range(50)
scales = np.linspace(0, 2, 7)
locs = range(4)
cmap = plt.get_cmap("Spectral")
norm = plt.Normalize(scales.min(), scales.max())

fig, axes = plt.subplots(2,2, constrained_layout=True, sharey=True)

for s_plot, ax in enumerate(axes.flat):
    for scale in scales:
        y = np.random.normal(loc=locs[s_plot], scale=scale, size=50)
        sc = ax.scatter(x, y, c=[cmap(norm(scale))], s=5)
        ax.set_title("Mean = {:d}".format(locs[s_plot]))

sm =  ScalarMappable(norm=norm, cmap=cmap)
sm.set_array([])
cbar = fig.colorbar(sm, ax=axes[:,1])
cbar.ax.set_title("scale")

plt.show()

enter image description here

关于python - 将颜色条作为图例添加到 matplotlib 散点图(多个子图,多个散点图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52868856/

相关文章:

Python 文档测试 : test for None

python - 值错误: x and y must be the same size

python - 如何使嵌入式Python解释器的本地空间与全局空间共享一些变量

python - pip:如何安装 git pull 请求

python - Matplotlib 错误栏仅包含 xerrors - 错误的图例符号

python - ValueError : too many values to unpack (expected 1)?

python - 如何为数据系列中的数据范围命名?

python - 单击图例 python 散点图中的数据开/关

java - jfreechart - 更改图例中的颜色样本

python - 如何安装 pythonds 模块?