Matplotlib:自定义标签的离散颜色条失败

时间:2019-03-17 15:08:48

标签: 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]类

1 个答案:

答案 0 :(得分:1)

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

enter image description here

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

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

通常,一种替代方法是使用BoundaryNorm,例如在Create a discrete colorbar in matplotlib中 或How to specify different color for a specific year value range in a single figure? (Python)python colormap quantisation (matplotlib)