首页 > 解决方案 > 在颜色之间打勾标签(离散着色器)

问题描述

嗨,我想将刻度标签放在颜色之间(间隔的中心),并且该图是由离散颜色绘制的。但最小值不是 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。但是当数据的最小值不为零时它不起作用。谢谢!

标签: matplotlibaxis-labelscolorbar

解决方案


假设有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()

示例图


推荐阅读