我想在 matplotlib 中用 imshow() 制作的色图中添加一行 plot(), 其中假定了几个不同大小的子图。添加一行时, 颜色图以某种方式改变了大小。我该如何解决这个问题?
下面是一个简单的例子来说明这个问题:
import scipy.stats as stat
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
fig = plt.figure(figsize=(12, 4))
plt.axes([.05,.1,.4,.8])
data = stat.uniform.rvs(size=2400).reshape((40,60))
plt.imshow(data,cmap=cm.jet,vmin=0,vmax=1)
plt.colorbar(fraction=.03)
plt.plot(range(60),20*np.ones(60),'w-',lw=3) # <-- causing problems
plt.title('the damn white line')
请您参考如下方法:
您可以在第一个绘图后使用命令 plt.autoscale(False) 避免这种情况。
此外,在我看来,使用 plt.axhline 会是更好的解决方案而不是 plt.plot 来制作一条水平线,因为 axhline 跨越轴的整个水平范围,即使您平移/缩放绘图也是如此。
换句话说,您的示例可以这样重写:
import scipy.stats as stat
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
data = stat.uniform.rvs(size=2400).reshape((40,60))
plt.figure(figsize=(12, 4))
plt.axes([.05,.1,.4,.8])
plt.imshow(data,cmap=cm.jet,vmin=0,vmax=1)
plt.colorbar(fraction=.03)
plt.autoscale(False)
plt.axhline(y=20, c='w', lw=3)
plt.title('the damn white line')
