matplotlib - 在颜色之间打勾标签(离散着色器)
问题描述
嗨,我想将刻度标签放在颜色之间(间隔的中心),并且该图是由离散颜色绘制的。但最小值不是 0。我该如何编写代码来做到这一点?我使用以下代码来做到这一点,但我得到的是错误的......
n_clusters = len(cbar_tick_label)
tick_locs = (np.arange(n_clusters)+0.5)*(n_clusters-1)/(n_clusters)
cbar.set_ticks(tick_locs)
cbar.set_ticklabels(cbar_tick_label)
此代码来自问题:Discrete Color Bar with Tick labels in between colours。但是当数据的最小值不为零时它不起作用。谢谢!
解决方案
假设有N
(例如 6 个)集群。如果将最小数字(例如5
)到最大数字(例如10
)的范围细分为N
相等的部分,则颜色单元之间的每个边界都会有一个勾号。细分为2*N+1
相等的部分,每个颜色单元的中心也会有一个刻度。现在,跳过这些2*N+1
刻度中的每一个,我们只剩下细胞中心。np.linspace(5, 10, 6*2+1)
边界和中心的刻度也是如此;服用np.linspace(5, 10, 6*2+1)[1::2]
将只有中心。
import numpy as np
import matplotlib.pyplot as plt
x, y = np.random.rand(2, 100)
c = np.random.randint(5, 11, x.shape)
n_clusters = c.max() - c.min() + 1
fig, ax = plt.subplots()
cmap = plt.get_cmap('inferno_r', n_clusters)
scat = ax.scatter(x, y, c=c, cmap=cmap)
cbar = plt.colorbar(scat)
tick_locs = np.linspace(c.min(), c.max(), 2 * n_clusters + 1)[1::2]
cbar_tick_label = np.arange(c.min(), c.max() + 1)
cbar.set_ticks(tick_locs)
cbar.set_ticklabels(cbar_tick_label)
plt.show()
推荐阅读
- python - Python Numpy 初学者:获取形状为 ((M,N),(M,N)) 的数组
- reactjs - 在 ReactJS 中没有渲染方法的渲染组件
- regex - 带有条件和后缀的正则表达式
- javascript - JS:使用字典比遍历数组更快吗?
- android - 当应用程序的多个页面在 Kotlin 中具有相同的 Activity 名称时,如何启动 Android Activity?
- etl - Source 和 Source Qualifier 之间的字段顺序需要相同吗?
- c# - 连接多个表并返回表 2 中的最后一条记录
- jpa - 使用 JPA CriteriaBuilder 的多级子查询
- apache-kafka - 如何将具有显式状态存储的 KTable-KTable leftJoin 从 Kafka 0.11 迁移到 Kafka 2.0?
- javascript - 检查反应用户是否有角色