2013-12-20 34 views
2

我通過matplotlib附圖中,軸和副區之間的關係困惑。在簡單的matplotlib圖中設置屬性的習慣用法是什麼?

通常情況下,我通過觀察和與代碼,這典型地體現在一個對象模型的實體,可以從什麼工作的例子來推斷之間的結構關係的實驗找出這樣的事情。但在matplotlib我經常發現的方法來完成同樣的事情,這掩蓋了下屬​​結構令人眼花繚亂。

例如,如果我想打一個簡單的(無子圖)日誌日誌的身影,下列任何一項似乎有效果完全一樣。

import matplotlib.pyplot as plt 

# All of the following seem to have the same effect: 
plt.axes().loglog() 
plt.gca().loglog() 
plt.loglog() 
plt.gcf().gca().loglog() 

# These don't work though: 
# plt.gcf().axes().loglog() 
# plt.gcf().loglog() 

我試過了文檔和教程,但我並不聰明。

是什麼每個工作上面的例子嗎?他們如何不同?爲什麼非實例會失敗?如果我正在編寫我期望別人(或我)能夠閱讀的代碼,那麼這些習語是否比其他語言更受歡迎?


請注意,這裏我的興趣是在編程方式創建用於出版或導出圖像,而不是在交互式創作的人物或模仿MATLABs功能。我認爲上面的一些「捷徑」與做後一種情況有關。

+1

Pyplot是MATLAB模擬層。如果你只看圖和軸對象,這一切都更有意義。我有一個很長的回答關於這個地方,但無法弄清楚如何在手機應用程序中找到它。它的缺點是看matotlib.pyplot的來源,這將清楚爲什麼所有這些調用做同樣的事情。 – tacaswell

+0

並且調用繪圖功能與設置屬性不同。 – tacaswell

+0

http://stackoverflow.com/questions/16849483/which-is-the-recommended-way-to-plot-matplotlib-or-pylab/16849816#16849816 – tacaswell

回答

1

基本上是一個窗口或一個文件。如果你做出幾個單獨的數字,這個想法通常是彈出幾個寡婦或保存幾個文件。

子圖在某種意義上是相同的東西。例如,figure方法subplot返回一個軸對象。每個軸對象表示您想要繪製某些內容的一組特定軸。每個軸可以有幾個單獨的數據集,但它們都將使用相同的x和y軸。

繪製一個loglog圖是由您用於實際繪製數據的函數確定的。舉例來說,如果你有兩個數組ab,我想雙對數暗算對方,我會用:

fig=plt.figure() #Make a figure 
loglog_ax=fig.subplot(111) # Make a single axis, which is the *only* subplot 
loglog_ax.loglog(a,b) # Plot the data on a log-log plot 
3

我的標準是從plt.subplots得到fig, ax這樣的:

fig, ax = plt.subplots(1) 
ax.loglog(a, b) 

我這樣做,因爲那樣你也可以得到多個ax對象作爲列表,例如:

# Make a column of three figures 
fig, axes = plt.subplots(3) 
for ax, a, b in zip(axes, as, bs): 
    ax.loglog(a, b) 

或者,如果你做了2 5格,你ax對象的列表的列表,所以我通常不公開使用axes.flat名單:

# Make a 2x5 grid of figures 
nrows = 2 
ncols = 5 
height = nrows * 4 
width = ncols * 4 

# Don't ask me why figsize is (width, height) instead of (height, width).... 
fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(width, height)) 

for ax, a, b in zip(axes.flat, as, bs): 
    ax.loglog(a, b) 

我做這種方式,因爲那時我有ax對象隨後與外觀調整。除了內部繪圖功能外,我通常不使用plt.gca()

plt.gcf()正在獲取當前數字,當您將gca()axes()loglog()添加到它時,我相信它們會創建底層軸。我不知道爲什麼gcf() - 第一個東西不適用於axes()loglog()。所以我的建議是堅持ax的對象。

編輯:除去itertools.chain東西,交換到axes.flat

+1

僅供參考:有沒有必要使用'itertools.chain' 。 'subplots'返回一個numpy對象數組。只需遍歷'axes.flat'。這與迭代itertools.chain(axes)'是一樣的(但是每次都比稍微更有效)。 –

+0

太棒了!我不知道那個伎倆。謝謝! –

相關問題