2014-09-21 29 views
0

我想用matplotlib繪製一個陰謀,我要指定刻度線的位置和刻度線的文字。我可以單獨使用yticks(np.arange(0,1.1,1/16.))gca().set_yticklabels(['1','2','3'])。但是,由於某些原因,當我將它們都放在一起時,標籤不會顯示在圖表上。是否有一個原因?我怎樣才能解決它?以下是我想要完成的一個工作示例。Pyplot設置打勾頻率和刻度標籤

x = [-1, -0.2, -0.15, 0.15, 0.2, 7.8, 7.85, 8.15, 8.2, 12] 
y = [1, 1, 15/16., 15/16., 1, 1, 15/16., 15/16., 1, 1] 

figure(1) 
plot(x,y) 
xlabel('Time (years)') 
ylabel('Brightness') 
yticks(np.arange(0,1.1,1/16.)) 
xticks(np.arange(0,13,2)) 
ylim(12/16.,16.5/16.) 
xlim(-1,12) 
gca().set_yticklabels(['12/16', '13/16', '14/16', '15/16', '16/16']) 
show(block = False) 

實際上,我只是想用分數替換數值,但是當我運行這個時,標籤不會出現。看起來同時使用yticks()set_yticklabels是一個問題,因爲如果我刪除任一行,則剩餘的行按其應該的方式工作。

如果任何人都可以指出如何簡單地強制標籤是一個分數,那也可以解決我的問題。

編輯: 我發現了一個醜陋的解決方法,通過使用

ylim(12/16., 16.5/16) 
gca().yaxis.set_major_locator(FixedLocator([12/16., 13/16., 14/16., 15/16., 16/16.])) 
gca().yaxis.set_major_formatter(FixedFormatter(['12/16', '13/16', '14/16', '15/16', '16/16'])) 

雖然這可能對於這個具體的例子工作,它並不能一概而論很好,這很麻煩,指定每個刻度標記的確切位置和標籤。如果有人找到另一種解決方案,我全都是耳朵。

回答

2

1)您的arange應產生5個滴答聲,與您設置的標籤相同。
arange對此不好。最好使用linspace

2)您可以設置刻度和標籤具有相同功能

plot(x,y) 
xlabel('Time (years)') 
ylabel('Brightness') 
yticks(np.linspace(12/16., 1, 5), ('12/16', '13/16', '14/16', '15/16', '16/16')) 
xticks(np.arange(0,13,2)) 
ylim(12/16.,16.5/16.) 
xlim(-1,12) 

enter image description here

3)請注意,您應該使用linspace(12/16., 1, 5)而不是標籤的位置調整軸的實際值的arange(0, 1.1, 1/16.))

相關問題