我正在设计一个Matplotlib
2D地图,我希望在颜色条的厚标签的正常和对数缩放之间进行交互式更改(不更改颜色网格)。所以我想要一个可以改变厚标签的RadioButton:
到
我设计了RadioButton
来执行此操作
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.colors as colors
from matplotlib.widgets import RadioButtons
def scalefunc(label):
if label == 'Normal':
cb.set_format(None)
fig.canvas.draw_idle()
elif label == 'Log':
cb.set_format(LogFormatter(10, labelOnlyBase=False))
fig.canvas.draw_idle()
Xi = np.random.random((100, 100))
Yi = np.random.random((100, 100))
Zi = np.random.random((100, 100))
fig, ax = plt.subplots(figsize=(16,10))
fig.subplots_adjust(left=0.23, bottom=0.25)
pcm = ax.pcolormesh(Xi,Yi,Zi, cmap = 'gist_gray')
cb = plt.colorbar(pcm, extend='max', format = None, pad = 0.04)
buttonax3 = plt.axes([0.04375, 0.7775, 0.075, 0.075])
scale_button = RadioButtons(buttonax3, ('Normal', 'Log'), activecolor='steelblue')
scale_button.on_clicked(scalefunc)
plt.show()
但这让我意识到colorbar
没有set_format
属性,因为我收到了错误
AttributeError: 'Colorbar' object has no attribute 'set_format'
这让我很困惑,因为我可以使用format
选项将颜色条的刻度标签直接设置为对数:
pcm = ax.pcolormesh(Xi,Yi,Zi, cmap = 'gist_gray')
cb = plt.colorbar(pcm, extend='max', format =
LogFormatter(10, labelOnlyBase=False), pad = 0.04)
那么我怎么能设计scalefunc
函数才能在颜色条上的两个粗标签之间切换?