我想要绘制一个2D矩阵。绘图本身有效,但我需要 用它的颜色条。这个数字只在数据有意义时才有意义 登录tranformed。我希望colorbar显示原始值。怎么样 我这样做吗?
提供搜索 A logarithmic colorbar in matplotlib scatter plot 但我无法做到这一点。
下面的代码概述了我尝试做的事情。只有贪婪 包括行(据我所见)。
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
my_speed=np.ones(shape=(no,no))
fig=plt.figure(2)
ax=fig.add_subplot(1,1,1)
my_speed=np.log10(my_speed)
ax.imshow(my_speed, interpolation='bilinear', cmap=cm.jet)
plt.colorbar() #this does not work
plt.savefig('myspeedplot.png')
plt.close(2)
感谢您的帮助
答案 0 :(得分:1)
我们的想法不是转换您的数据,而是让可视化为您解决问题。
pylot.imshow [1]有一个可选参数norm
,可以为您进行日志转换。
my_speed=np.ones(shape=(no,no))
fig = plt.figure(2)
ax = fig.add_subplot(1,1,1)
# my_speed=np.log10(my_speed)
img = ax.imshow(my_speed, interpolation='bilinear', cmap=cm.jet,
norm=mpl.colors.LogNorm())
fig.colorbar(img)
答案 1 :(得分:1)
据我所知,您的代码存在两个问题。
首先,您试图让彩条上的刻度显示原始值。为此,您不应该转换数据,而只是标准化图。
其次,您正在使用ax.imshow
,这就是colorbar
没有看到它的原因。您应该使用plt.imshow
或使用im=ax.imshow
,然后使用colorbar(im)
这是一个有效的解决方案:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
my_speed = np.random.rand(20, 20)
fig = plt.figure(2)
ax = fig.add_subplot(1, 1, 1)
im = ax.imshow(my_speed, interpolation='bilinear',
norm=mpl.colors.LogNorm(),
cmap=plt.cm.jet)
cb = plt.colorbar(im, orientation='vertical')
plt.show()