2012-10-24 183 views
18

我在尋找減少對不同的次要情節matplotlib:如何降低子圖中刻度標籤的密度?

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 
from StringIO import StringIO 
data = """\ 
    a b c d 
z 54.65 6.27 19.53 4.54 
w -1.27 4.41 11.74 3.06 
d 5.51 3.39 22.98 2.29 
t 76284.53 -0.20 28394.93 0.28 
""" 
df = pd.read_csv(StringIO(data), sep='\s+') 
gs = gridspec.GridSpec(3, 1,height_ratios=[1,1,4]) 
ax0 = plt.subplot(gs[0]) 
ax1 = plt.subplot(gs[1]) 
ax2 = plt.subplot(gs[2]) 
df.plot(kind='bar', ax=ax0,color=('Blue','DeepSkyBlue','Red','DarkOrange')) 
df.plot(kind='bar', ax=ax1,color=('Blue','DeepSkyBlue','Red','DarkOrange')) 
df.plot(kind='bar', ax=ax2,color=('Blue','DeepSkyBlue','Red','DarkOrange'),rot=45) 
ax0.set_ylim(69998, 78000) 
ax1.set_ylim(19998, 29998) 
ax2.set_ylim(-2, 28) 
ax0.legend().set_visible(False) 
ax1.legend().set_visible(False) 
ax2.legend().set_visible(False) 
ax0.spines['bottom'].set_visible(False) 
ax1.spines['bottom'].set_visible(False) 
ax1.spines['top'].set_visible(False) 
ax2.spines['top'].set_visible(False) 
ax0.xaxis.set_ticks_position('none') 
ax1.xaxis.set_ticks_position('none') 
ax0.xaxis.set_label_position('top') 
ax1.xaxis.set_label_position('top') 
ax0.tick_params(labeltop='off') 
ax1.tick_params(labeltop='off', pad=15) 
ax2.tick_params(pad=15) 
ax2.xaxis.tick_bottom() 
d = .015 
kwargs = dict(transform=ax0.transAxes, color='k', clip_on=False) 
ax0.plot((-d,+d),(-d,+d), **kwargs) 
ax0.plot((1-d,1+d),(-d,+d), **kwargs) 
kwargs.update(transform=ax1.transAxes) 
ax1.plot((-d,+d),(1-d,1+d), **kwargs) 
ax1.plot((1-d,1+d),(1-d,1+d), **kwargs) 
ax1.plot((-d,+d),(-d,+d), **kwargs) 
ax1.plot((1-d,1+d),(-d,+d), **kwargs) 
kwargs.update(transform=ax2.transAxes) 
ax1.plot((-d,+d),(1-d/4,1+d/4), **kwargs) 
ax1.plot((1-d,1+d),(1-d/4,1+d/4), **kwargs) 
plt.show() 

導致 enter image description here

我想在兩個上次要情節下降刻度標記刻度標記的密度。怎麼做 ?謝謝。

獎勵:1)如何讓Y = 0去掉虛線在酒吧的基礎是什麼? 2)如何擺脫副標題0和1之間的X技巧標籤? 3)如何將情節的背面設置爲透明? (請參閱消失的情節背後右下角破y軸線)

回答

15

您可以設置蜱要在其中就像你設置的xticks。

import numpy as np 
ax0.yaxis.set_ticks(np.arange(70000,80000,2500)) 

這將爲您的ax0子圖創建四個均勻間隔的刻度。你可以爲你的其他子圖做類似的事情。

31

Aman在方法建議的改進如下:

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1) 

# ... plot some things ... 

# Find at most 101 ticks on the y-axis at 'nice' locations 
max_yticks = 100 
yloc = plt.MaxNLocator(max_yticks) 
ax.yaxis.set_major_locator(yloc) 

plt.show() 

希望這有助於。

+0

這有助於減少蜱的數量,但現在我有前三蜱,而不是在正確的位置的刻度。 –

+2

它看起來像一個MaxNLocator對象只能用於單個軸。如果重複使用具有不同滴答的多個軸的定位器,則最後的滴答將用於所有軸。 – Mike

31

的一般方法是告訴matplotlib蜱的期望數量:通過從@Daniel電源評論

plt.locator_params(nbins=10) 

編輯:(例如'x')來改變單個軸的軸線上,可使用:

ax.locator_params(nbins=10, axis='x') 
+7

這應該是公認的答案 –

+1

改變單個軸(例如X)的軸線上,使用:ax.locator_params(nbins = 10,軸=「X」) –

+0

我得到一個'類型錯誤:set_params()得到一個意外的關鍵字參數'nbins''任何想法它有什麼問題? – durbachit

相關問題