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