2014-06-17 50 views
1

我使用循環創建圖,我希望這些圖共享他們的x軸。以下是代碼示例。當然,val和函數的繪製更復雜。我想所有的小區共享x軸。如何將x軸共享到循環中?

import matplotlib.pyplot as plt 
import numpy as np 

val = [0.1, 0.2, 0.3] 
nplots = len(val) 
plt.figure() 
for i, alpha in enumerate(val): 
    plt.subplot(nplots,1,i+1) 
    plt.plot(np.linspace(0,1,100), a * np.linspace(0,1,100)**2) 
plt.show() 
+0

你所說的「分享與x軸」是什麼意思?你明確地做出不同的子圖。如果你的意思是讓它們跨度相同,你可以用xlim()明確地設置它們的限制。 – Ajean

+0

預期產量會是多少? – Christian

+0

所有的x軸將跨越相同的範圍(由於數據),但如果繪圖共享x軸,如果我放大一個繪圖,它也將縮放其他繪圖,這就是我想要得到的行爲。 – Ger

回答

2

如果我理解正確的問題,這裏的配方例子可能幫助:

http://matplotlib.org/examples/pylab_examples/shared_axis_demo.html

在你的背景下,請問如何辦?

fig = plt.figure() 
ax0 = plt.subplot(nplots,1,1) 
plt.plot(np.linspace(0,1,100), a * np.linspace(0,1,100)**2) 
for i, alpha in enumerate(val): 
    plt.subplot(nplots,1,i+2,sharex=ax0) 
    plt.plot(np.linspace(0,1,100), a * np.linspace(0,1,100)**2) 
plt.show() 

編輯: 更新我自己的答案有一個更優雅的解決方案的OP可能會喜歡:

vals = np.linspace(0,1,3) 
nplots = len(vals) 
fig, axs = plt.subplots(nrows=nplots, ncols=1, sharex=True) 
for i, alpha in enumerate(vals): 
    axs[i].plot(np.linspace(0,1,100), alpha * np.linspace(0,1,100)**2) 
plt.show() 
+0

不是真的,我的問題與循環有關。我必須創建一個ax對象列表嗎? – Ger

+0

我認爲這不應該是重要的是否在循環中創建子圖是否重要,但是,您需要保留對ax對象的引用以便與其他人共享它們。 – Ajean

+0

也許只是保持第一個與其他人分享將會(例如) – Ajean