2013-04-05 64 views
0

說我有一堆AX1,AX2,AX3的使用一個命令軸的對象......我想通過一個繪圖功能來運行它們:情節大量通過循環

def plotxy(ax,x,y): 
    x = np.array(x) 
    y = np.array(y) 
    ax.plot(x,y) 

(明顯簡化)

我怎麼會重複該命令而不做:

plotxy(ax1,x,y) 
plotxy(ax2,x,y) 
... 
plotxy(axn,x,y) 

我敢肯定有一種方法來創建保持在一個循環中AXN這可能只是一條線一個臨時變量。有任何想法嗎?這會大大縮短我的代碼,因爲我有許多事情需要使用相同的命令進行繪製,但是不同的x和y多個子圖都是不同的。

我想這是使用循環構造變量名稱的一個大問題的一部分?

回答

3

你可以嘗試這樣的事:如果你使用plt.subplotplt.axes您可以創建一個列表

import matplotlib.pyplot as plt 
fig, axs = plt.subplots(nrows=3, ncols=2) 

for ax in axs.flat: 
    plotxy(ax,x,y) 

/手動軸列

0

我可能在你的問題中遺漏了一些東西,但你爲什麼不用一個簡單的循環?

for ax in (ax1, ax2, ..., axn): 
    plotxy(ax,x,y) 

您也可避免明確的列出所有的變量:

axes = (locals()['ax%d'%i] for i in range(1, n+1)) 
for ax in axes: 
    plotxy(ax,x,y) 
+0

你是什麼意思?你的問題中的所有變量都被命名爲'「ax%d」%i' – shx2 2013-04-05 13:45:28

+0

我的意思是如果我的變量名爲plot1ax1,並且我想循環繪圖中的數字即plot1ax1,plot2ax1等。 – Griff 2013-04-05 13:50:43

+0

帶有「ax% d'%i'構造變量的名稱。如果你的變量命名爲'plot?ax1',你可以用'plot%dax1'%i'或者'plot%dax%d'%(i,j)'替換'ax%d'%i''對於2D命名約定...... – shx2 2013-04-05 13:54:12

1

您還可以使用mapxy是名字空間的變量和axx一些迭代在你的對象軸:

x = ... 
y = ... 

def plotxy(ax): 
    ax.plot(x,y) 

map(plotxy,axx) 
+1

'map'不應該被用作循環的替代品。在這種情況下,循環更合適,因爲'map'會創建一個從不使用的結果列表(在這種情況下爲'None'),這是浪費的。此外,列表理解應該優於'map',但是在這種情況下,我也不會使用。 – shx2 2013-04-05 14:04:32

+1

@ shx2嗯,技術上'ax.plot'返回一些東西,所以'map'用'def plotxy(ax):return ax.plot(x,y)'會返回一個潛在有用的列表。 – askewchan 2013-04-05 15:02:57