在颜色之间勾选标签(离散着色器)

Tick labels in between colors (discrete colorer)

您好,我想将刻度标签放在颜色之间(间隔的中心),并且该图是由离散颜色绘制的。但是最小值不是 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)

此代码来自问题:。但当数据的最小值不为零时,它不起作用。 谢谢!

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