给色条添加顶部和底部数值标签

5
我想给我的颜色条添加顶部和底部值。因此,顶部值是数据中所有值的最大值,底部值是数据中的最小值。 enter image description here
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

data = np.genfromtxt("E:\\data\\data1.txt", delimiter="\t")
minVal =  np.min(data[np.nonzero(data)])
maxVal =  np.max(data[np.nonzero(data)])

fig, ax = plt.subplots()
im = ax.imshow(data, cmap='Purples',
           interpolation='nearest',
           norm=matplotlib.colors.LogNorm(),
           vmin=minVal,vmax = maxVal,    
               )

cbar = fig.colorbar(im)

print("min ",minVal)
print("max", maxVal)

plt.show()

这里有一个相关的问题。请查看 - 在matplotlib中设置colorbar范围 - AVX-42
1个回答

4

以下是一种使用随机数据进行演示的解决方案。思路如下:

  • 从色条中获取现有刻度和标签
  • 在最小值和最大值处添加两个刻度和标签
  • 设置新的刻度和标签

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

data = np.random.randint(0, 50000, (50,50))
minVal =  np.min(data[np.nonzero(data)])
maxVal =  np.max(data[np.nonzero(data)])

print (minVal, maxVal)
# 4, 49983    

fig, ax = plt.subplots()
im = ax.imshow(data, cmap='Purples', interpolation='nearest',
           norm=matplotlib.colors.LogNorm(), vmin=minVal,vmax = maxVal,)

cbar = fig.colorbar(im)

# Get the default ticks and tick labels
ticklabels = cbar.ax.get_ymajorticklabels()
ticks = list(cbar.get_ticks())

# Append the ticks (and their labels) for minimum and the maximum value
cbar.set_ticks([minVal, maxVal] + ticks)
cbar.set_ticklabels([minVal, maxVal] + ticklabels)

enter image description here


1
由于某些原因,我不得不省略最后一行 (cbar.set_ticklabels([minVal, maxVal] + ticklabels)),因为它会传递刻度标签的文本 ("Text(1,0,0)") 而不是值。但是省略这个最后一行仍然会产生默认的标签间隔和最小值、最大值。非常棒的解决方案,谢谢。 - a11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接