亲爱的Python用户,
我尝试通过将LinearSegmentedColormap与Imshow结合使用,使用matplotlib库来制作色彩映射,并且我很难使用实际的色条。
默认情况下,colorbar的行为方式与我想要的方式不同,也就是说,它对于我的图形来说太大了。默认情况下,我得到这个:
所以,我使用以下代码行来修复colorbar高度,参考this post:
ax = plt.gca()
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
plt.colorbar(img2, cax=cax)
然后我得到了这个非常奇怪的结果:
我无法弄清楚为什么添加的代码行会与我的轴交互并绘制标题...为什么它们会使用颜色栏?
以下是完整的代码:
import matplotlib.pyplot as plt
import matplotlib.pylab as pylab
import matplotlib.colors as colors
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
#random data for example
clmap = np.random.rand(30,500)
#plot 2D color map
fig = plt.figure()
cmap2 = colors.LinearSegmentedColormap.from_list('my_colormap', ['blue','green','red'], 256)
img2 = plt.imshow(clmap,interpolation='nearest',cmap = cmap2,origin='lower')
ax = plt.gca()
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
fig.colorbar(img2, cmap = cmap2, cax=cax)
plt.title('color map of atom probab at iteration 1')
plt.xlabel('atom id')
plt.ylabel('layer')
fig.savefig("map_p_1.png")
plt.gcf().clear()
答案 0 :(得分:1)
您正在将pyplot状态机(plt
)与面向对象的API混合使用
创建第二个轴对象(cax
)后,它将成为当前轴。之后传递的所有pyplot命令都将应用于此轴。
最简单的方法是在创建新轴之前应用pyplot命令:
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
#random data for example
clmap = np.random.rand(30,500)
#plot 2D color map
fig = plt.figure()
plt.title('color map of atom probab at iteration 1')
plt.xlabel('atom id')
plt.ylabel('layer')
cmap2 = colors.LinearSegmentedColormap.from_list('my_colormap', ['blue','green','red'], 256)
img2 = plt.imshow(clmap,interpolation='nearest',cmap = cmap2,origin='lower')
ax = plt.gca()
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
fig.colorbar(img2, cmap = cmap2, cax=cax)
fig.savefig("map_p_1.png")
plt.show()