以交互方式将颜色条标记变为对数格式

时间:2017-11-30 12:06:18

标签: python matplotlib colorbar

我正在设计一个Matplotlib 2D地图,我希望在颜色条的厚标签的正常和对数缩放之间进行交互式更改(不更改颜色网格)。所以我想要一个可以改变厚标签的RadioButton:

Normal scale

Logarithmic scale

我设计了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函数才能在颜色条上的两个粗标签之间切换?

0 个答案:

没有答案