我想在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')
答案 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')
答案 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的答案相同。