如何在图像/矩阵中添加带有日志数据的颜色条

时间:2014-07-17 15:47:31

标签: python matplotlib

我想要绘制一个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)

感谢您的帮助

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()