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

时间:2013-05-10 04:54:17

标签: python matplotlib plot color-mapping

我想在matplotlib中使用plot()为彩色地图添加一行imshow(), 假设有几个不同大小的子图。添加一行时, 颜色图以某种方式改变了大小。我该如何解决这个问题?

这是一个说明问题的简单示例:

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

2 个答案:

答案 0 :(得分:0)

您可以在第一个图之后使用命令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

答案 1 :(得分: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的答案相同。