如何添加Matplotlib颜色条刻度
在Stack Overflow上有很多关于matplotlib颜色条的问题,但我看不懂它们,没法解决我的问题。
我该怎么设置颜色条上的y轴标签呢?
下面是一些示例代码:
from pylab import *
from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt
f = np.arange(0,101) # frequency
t = np.arange(11,245) # time
z = 20*np.sin(f**0.56)+22 # function
z = np.reshape(z,(1,max(f.shape))) # reshape the function
Z = z*np.ones((max(t.shape),1)) # make the single vector to a mxn matrix
T, F = meshgrid(f,t)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.pcolor(F,T,Z, norm=LogNorm(vmin=z.min(),vmax=z.max()))
plt.xlim((t.min(),t.max()))
mn=int(np.floor(Z.min())) # colorbar min value
mx=int(np.ceil(Z.max())) # colorbar max value
md=(mx-mn)/2 # colorbar midpoint value
cbar=plt.colorbar() # the mystery step ???????????
cbar.set_yticklabels([mn,md,mx]) # add the labels
plt.show()
6 个回答
1
treenick 的回答让我有了启发,但如果你的颜色条是从 0 到 1 之间的比例,而你的 fields
没有在这个范围内,那么那段代码就不会显示刻度了。所以我改用了下面的代码:
m0=int(np.floor(field.min())) # colorbar min value
m4=int(np.ceil(field.max())) # colorbar max value
num_ticks = 10
# to get ticks
ticks = np.linspace(0, 1, num_ticks)
# get labels
labels = np.linspace(m0, m1, num_ticks)
如果你想让标签之间有间隔,可以使用 Python 的列表索引,像这样操作:假设是跳过每隔一个刻度。
ticks = ticks[::2]
labels = labels[::2]
10
这是一个可以工作的例子(适用于任何数值范围),在条形图上有五个刻度:
m0=int(np.floor(field.min())) # colorbar min value
m4=int(np.ceil(field.max())) # colorbar max value
m1=int(1*(m4-m0)/4.0 + m0) # colorbar mid value 1
m2=int(2*(m4-m0)/4.0 + m0) # colorbar mid value 2
m3=int(3*(m4-m0)/4.0 + m0) # colorbar mid value 3
cbar.set_ticks([m0,m1,m2,m3,m4])
cbar.set_ticklabels([m0,m1,m2,m3,m4])
60
更新刻度和刻度标签:
cbar.set_ticks([mn,md,mx])
cbar.set_ticklabels([mn,md,mx])