首页 > 解决方案 > Matplotlib:自定义标签的离散颜色条失败

问题描述

当我尝试将颜色条添加到散点图时,我遇到了一个严重的问题,该散点图指示单个样本所属的类。该代码在类为 [0,1,2] 时完美运行,但当类为例如 [4,5,6] 时,会在颜色图末尾自动选择颜色条颜色值,并且颜色条看起来是蓝色纯色。我遗漏了一些明显的东西,但我无法弄清楚它是什么。

以下是有关该问题的示例代码:

import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(1 , figsize=(6, 6))
plt.scatter(datapoints[:,0], datapoints[:,1], s=20, c=labels, cmap='jet', alpha=1.0)
plt.setp(ax, xticks=[], yticks=[])
cbar = plt.colorbar(boundaries=np.arange(len(classes)+1)-0.5)
cbar.set_ticks(np.arange(len(classes)))
cbar.set_ticklabels(classes)
plt.show()

变量可以是例如

datapoints = np.array([[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]])
labels = np.array([4,5,6,4,5,6,4])
classes = np.array([4,5,6])

正确的结果是什么时候得到

labels = np.array([0,1,2,0,1,2,0])

就我而言,我希望它也适用于类 [4,5,6]

标签: matplotlib

解决方案


buoundaries需要在数据单元中。意思是,如果你的类是4,5,6,你可能想要使用 的边界3.5, 4.5, 5.5, 6.5

import matplotlib.pyplot as plt
import numpy as np

datapoints = np.array([[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7]])
labels = np.array([4,5,6,4,5,6,4])
classes = np.array([4,5,6])


fig, ax = plt.subplots(1 , figsize=(6, 6))
sc = ax.scatter(datapoints[:,0], datapoints[:,1], s=20, c=labels, cmap='jet', alpha=1.0)
ax.set(xticks=[], yticks=[])
cbar = plt.colorbar(sc, ticks=classes, boundaries=np.arange(4,8)-0.5)

plt.show()

在此处输入图像描述

如果你想从类中自动确定边界,我必须做出一些假设。例如,如果所有类都是后续整数,

boundaries=np.arange(classes.min(), classes.max()+2)-0.5

通常,另一种方法是使用 a BoundaryNorm,例如在 matplotlib 中创建离散颜色条 或如何在单个图中为特定年份值范围指定不同颜色?(Python)python 颜色图量化 (matplotlib)


推荐阅读