2012-05-03 112 views
4

對於我喜歡使用的字體大小,我發現5個刻度是Matplotlib中幾乎每個軸上最具視覺上令人滿意的刻度數。我也喜歡修剪沿x軸的最小刻度 ,以避免重疊刻度。所以對於我製作的幾乎所有情節,我都會使用下面的代碼。Matplotlib,全局設置滴答數。 X軸,Y軸,彩條

from matplotlib import pyplot as plt 
from matplotlib.ticker import MaxNLocator 

plt.imshow(np.random.random(100,100)) 
plt.gca().xaxis.set_major_locator(MaxNLocator(nbins = 7, prune = 'lower')) 
plt.gca().yaxis.set_major_locator(MaxNLocator(nbins = 6)) 
cbar = plt.colorbar() 
cbar.locator = MaxNLocator(nbins = 6) 
plt.show() 

有一個RC設置,我可以使用,這樣對我的x軸,y軸,和彩默認定位器是默認以上MaxNLocator與x軸剪枝選項?

回答

3

爲什麼不直接寫一個自定義模塊myplotlib來設置這些默認值?

import myplt 
myplt.setmydefaults() 

全局rc設置可能會破壞依賴於這些設置的其他應用程序未被修改。

+0

我喜歡這個想法。就像繼承matplotlib的自定義類一樣?我不確定myplt.setmydefaults會是什麼樣子。 – ncRubert

+0

其實不是一堂課。只是一個調用'plt.whatever'的方法我猜。 –

1

正如Anony-慕斯建議

製作一個文件myplt.py

#!/usr/bin/env python 
# File: myplt.py 

from matplotlib import pyplot as plt 
from matplotlib.ticker import MaxNLocator 

plt.imshow(np.random.random(100,100)) 
plt.gca().xaxis.set_major_locator(MaxNLocator(nbins = 7, prune = 'lower')) 
plt.gca().yaxis.set_major_locator(MaxNLocator(nbins = 6)) 
cbar = plt.colorbar() 
cbar.locator = MaxNLocator(nbins = 6) 
plt.show() 

在您的代碼或IPython中會議

import myplt 
2

matplotlib.ticker.MaxNLocator類有可以使用的屬性設置默認值:

default_params = dict(nbins = 10, 
         steps = None, 
         trim = True, 
         integer = False, 
         symmetric = False, 
         prune = None) 

例如,腳本開始處的這一行將每次創建5個刻度線MaxNLocator由軸對象使用。

from matplotlib.ticker import * 
MaxNLocator.default_params['nbins']=5 

不過,默認的定位是matplotlib.ticker.AutoLocator,基本上調用MaxNLocator與硬連線的參數,從而使上面會有沒有進一步黑客沒有全球性的影響。

要更改默認定位器MaxNLocator,我能找到的最好的是覆蓋matplotlib.scale.LinearScale.set_default_locators_and_formatters有一個自定義的方法:

import matplotlib.axis, matplotlib.scale 
def set_my_locators_and_formatters(self, axis): 
    # choose the default locator and additional parameters 
    if isinstance(axis, matplotlib.axis.XAxis): 
     axis.set_major_locator(MaxNLocator(prune='lower')) 
    elif isinstance(axis, matplotlib.axis.YAxis): 
     axis.set_major_locator(MaxNLocator()) 
    # copy & paste from the original method 
    axis.set_major_formatter(ScalarFormatter()) 
    axis.set_minor_locator(NullLocator()) 
    axis.set_minor_formatter(NullFormatter()) 
# override original method 
matplotlib.scale.LinearScale.set_default_locators_and_formatters = set_my_locators_and_formatters 

這具有能夠爲兩個X指定不同的選擇很好的副作用和Y蜱蟲。