2016-01-08 92 views
1

我正在創建大量的子圖,我想關閉所有子圖的座標軸。 目前我通過關閉一個圖的所有子圖的座標軸

fig, ax = plt.subplots(7, len(clusters)) 
fig.subplots_adjust(wspace=0, top=1.0, bottom=0.5, left=0, right=1.0) 

for x in ax.ravel(): 
    x.axis("off") 

實現這一點,但在循環次要情節單獨轉軸是醜陋的。 有沒有辦法告訴subplots在創建時間 或在Figurepyplot上的某些設置打開od軸,以便全局關閉軸。 pyplot.axis('off')僅在最後一個子圖上關閉座標軸。

+1

爲什麼它很醜? 你可以將它隱藏在一個函數'remove_numbers = lambda ax:[x.axis('off')for ax.ravel()]' – tacaswell

+0

@Daniel對我的答案有任何反饋?它有幫助嗎?我應該刪除它嗎? –

回答

1

我同意with @tcaswell你應該只使用你已經使用的東西。使用它作爲一個功能的另一種選擇是使用numpy.vectorize()

import matplotlib.pyplot as plt 
import numpy as np 
fig, ax = plt.subplots(7, len(clusters)) 
np.vectorize(lambda ax:ax.axis('off'))(ax) 

,或者,如果你需要多次調用它,通過分配vectorize d函數的變量:

axoff_fun = np.vectorize(lambda ax:ax.axis('off')) 
# ... stuff here ... 
fig, ax = plt.subplots(7, len(clusters)) 
axoff_fun(ax) 

同樣,請注意,這與@tcaswell建議的相同之處在於,更有趣的設置(可能只會更慢)。而這與你現在使用的基本相同。


但是,如果你堅持做一些其他的方式(即你是一種特殊的懶惰),你可以設置matplotlib.rcParams一次,然後每一個後續的軸將自動off。有可能效仿axis('off')一個更簡單的方法,但這裏是我是如何成功:

import matplotlib as mpl 

# before 
mpl.pyplot.figure() 
mpl.pyplot.plot([1,3,5],[4,6,5]) 

# kill axis in rcParams 
mpl.rc('axes.spines',top=False,bottom=False,left=False,right=False); 
mpl.rc('axes',facecolor=(1,1,1,0),edgecolor=(1,1,1,0)); 
mpl.rc(('xtick','ytick'),color=(1,1,1,0)); 

# after 
mpl.pyplot.figure() 
mpl.pyplot.plot([1,3,5],[4,6,5]) 

結果/前後:

before rcparamsafter rcparams

但願不會有哪個我忘了什麼驚喜重寫,但是無論如何,這在實際應用中會很快變得清晰。

相關問題