matplotlib - 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]
解决方案
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)
推荐阅读
- python - Psycopg2 - 如何在将列表字典插入到 postgres 表中时包含“空”值?
- html - Html Table - 设置没有 CSS 的列的最大宽度
- flutter - 单元测试 Flutter 平台通道的正确方法是什么?
- javascript - vis.js 在时间轴上动态创建一个新项目
- html - 如何在模式中编辑表单条目
- python-3.x - 将 Web 浏览器窗口添加到 Tkinter 窗口
- c++ - 带有 STL 向量的自定义分配器(在 Visual Studio 工具链中)
- vba - Excel VBA自动过滤器不断删除与条件不匹配的数据
- javascript - 单击按钮时 HTML 未正确更新
- c# - Net Core 从 Openweather API 查找温度的简单方法