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

问题描述

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

解决方法

假设有 N(例如 6 个)集群。如果将最小数字(例如 5)到最大数字(例如 10)的范围细分为 N 等份,则颜色单元格之间的每个边框都会有一个勾号。细分为 2*N+1 等份,也会在每个颜色单元格的中心有一个勾号。现在,跳过这些 2*N+1 滴答中的每一个,我们将只剩下细胞中心。所以,np.linspace(5,10,6*2+1) 是边界和中心的刻度;取 np.linspace(5,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()

example plot

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...