我有一个用imshow()生成的matplotlib图,我想用新数据更新它,并在日志和线性颜色条之间切换和规范化。我可以删除所有轴并重新开始,但这很慢。我已经想出了如何更新数据和规范化,但是在不删除颜色条的情况下无法在日志和线性颜色条之间切换。
这将使用日志颜色条绘制初始图像:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
data = np.random.rand(100, 100)
figure = plt.figure('test')
axes = figure.add_subplot(1, 1, 1)
image = axes.imshow(data, interpolation='nearest', norm=mpl.colors.LogNorm())
colorbar = figure.colorbar(image)
figure.canvas.draw()
然后更改数据:
data2 = 10000 * np.random.rand(5, 10)
rows, cols = np.shape(data2)
image.set_data(data2)
image.set_extent([-0.5, cols - 0.5, -0.5, rows - 0.5]) # is there a better way to do this?
image.autoscale()
figure.canvas.draw()
然后更改标准化并尝试更改颜色条,但是标记位于错误的位置,就像颜色条仍然是日志一样:
colorbar.locator = mpl.ticker.LinearLocator()
colorbar.formatter = mpl.ticker.ScalarFormatter()
image.set_norm(mpl.colors.Normalize())
# colorbar.update_ticks() # doesn't change anything
figure.canvas.draw()
如果我从线性颜色条开始(省略第一部分中的norm参数),切换到线性颜色条也不起作用:
colorbar.locator = mpl.ticker.LogLocator()
colorbar.formatter = mpl.ticker.LogFormatterMathtext()
image.set_norm(mpl.colors.LogNorm())
figure.canvas.draw()