2013-05-10 70 views
1

我想与plot()添加一行与imshow()在matplotlib, 其中多个不同尺寸的子图被认为制造的彩色地图。当添加一条线, 颜色映射以某种方式更改大小。我如何解决这个问题?避免变化()来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

在绘图之前禁用自动缩放或将其设置为“紧”,请参阅: http://stackoverflow.com/questions/16157180/how-to-remove-padding-border-in-a-matplotlib-subplot -solved/16162912#16162912 – 2013-05-10 07:12:56

+1

正如@RutgerKassies所提到的,你可以用命令'plt.autoscale(False)'来避免这种情况。另外,在我看来,使用'plt.axhline(y = 20,c ='w',lw = 3)'而不是'plt.plot(range(60),20 * np)会是更好的解决方案。 (60),'w - ',lw = 3)',因为['axhline'](http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline)跨越整个水平范围轴,即使您平移/放大图。 – hooy 2013-05-10 10:45:17

+0

@nordev您应该将其作为回答发布 – tacaswell 2013-05-10 14:04:00

回答

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

0

这是一个非常简单的替代解决方案:改变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.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的答案相同。