避免在将plot()添加到imshow()时改变图像大小。

3

我想在使用imshow()制作的matplotlib颜色地图中添加一条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')

在绘图之前禁用自动缩放或将其设置为“紧密”,请参见: https://dev59.com/n3HYa4cB1Zd3GeqPJkQe#16162912 - Rutger Kassies
1
如@RutgerKassies所提到的,您可以使用命令plt.autoscale(False)来避免这个问题。此外,在我看来,使用plt.axhline(y=20, c='w', lw=3)比使用plt.plot(range(60),20*np.ones(60),'w-',lw=3)更好,因为axhline会在绘图中水平方向上延伸整个坐标轴的范围,即使您在绘图中进行了平移/缩放操作。 - sodd
@nordev你应该将其发布为答案。 - tacaswell
@user1227298 如果您找到了解决办法,您应该将其发布为答案。 - tacaswell
@nordev,这只是一个例子。实际情况下,曲线是真实的。 - user1227298
2个回答

2
在第一次绘制之后,您可以使用命令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')

enter image description here


0

这里有一个非常简单的替代方案:改变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.plot(range(60),20*np.ones(60),'w-',lw=3)  #  <--- mow before imshow()
plt.imshow(data,cmap=cm.jet,vmin=0,vmax=1)
plt.colorbar(fraction=.03)
plt.title('the damn white line')

输出结果与nordev的答案相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接