python - 在 matplotlib 中添加整数图例而不是渐变
问题描述
我想添加一个只有整数的图例,即 0,1,2,3...14,而不是渐变色条。基本上,我希望数组值在图例中具有唯一的颜色和标签,以便您可以清楚地区分数组中的每个值。
fileloc=os.path.join(basepath, infile)
data=np.loadtxt(fileloc)
fig = plt.figure(figsize=(20,10))
plt.imshow(data)
plt.colorbar()
解决方案
如果我正确理解了这个问题,数据将作为一个整数 numpy 数组给出,这会产生一个具有完全 N 种不同颜色的图像。
要从 viridis 颜色图中获取恰好具有 N 个颜色的颜色图,请使用plt.cm.get_cmap('viridis', N)
. 这将产生一个恰好有 N 个区域的颜色条。
为了在每个区域的中心很好地获得刻度,将空间分成 2N+1 块,然后取所有奇数位置。(因此,如果有 5 种颜色,颜色条将从 0 变为 4,这将得到 11 个标记,其中标记 0 被跳过,而使用标记 1、3、5、7 和 9)。在每个刻度旁边可以放置一个带有数字的标签。
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6, 4))
# create some random test data
data = np.random.normal(0, 0.05, size=(150, 150)).cumsum(axis=0).cumsum(axis=1)
data = data.astype(np.int) # convert to integers
data -= data.min() # let the numbers start at zero
num_colors = data.max() + 1
cmap = plt.cm.get_cmap('viridis', num_colors)
plt.imshow(data, cmap=cmap)
cbar = plt.colorbar(ticks=np.linspace(0, num_colors - 1, num_colors * 2 + 1)[1::2])
cbar.ax.set_yticklabels(range(num_colors))
plt.show()
推荐阅读
- json - 使用 jq 基于另一个键名更新 json 的键
- javascript - Chrome 扩展:返回的窗口变量不在扩展中更新,但在页面源中更新
- php - 将 codeigniter 4 与 postgres 连接时出现问题 - CodeIgniter\Database\Exceptions\DatabaseException #8
- python - 执行 randomSearchCV 时传递了多个评估指标
- sql - 有没有办法在 PosgreSQL/PostGIS 中运行一个查询而不是这两个
- javascript - Webpacker 没有在生产中缩小 JS
- android - 电子邮件服务器更改 URL 时的 iOS 通用链接/Android 应用程序链接
- php - 将简码函数插入 php 行
- javascript - How to pass the value of a PHP function to a Javascript variable?
- java - 如何在 Java 中抓取我想要的 HTML 数据?