Skip to main content
 首页 » 编程设计

python之将 plot() 添加到 imshow() 时避免更改图形大小

2025年05月04日10leader

我想在 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')