2013-05-10 73 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的答案相同。