2014-06-26 37 views
0

我想用一個分數對數來繪製一些數據,這樣y軸的刻度爲10 ^( - 0.1),10 ^( - 0.2),10 ^( - 0.3), 問題是,當我繪製我的數據時,在10^0和10^-1處只有刻度線,這使得線的斜率太小而看不到。python matplotlib:fractional logscale

這樣可以設置分數對數比例嗎?

感謝

+0

可能會解決您的問題的相關問題:http://stackoverflow.com/questions/6682784/how-to-reduce-number-of-ticks-with-matplotlib和http://stackoverflow.com/questions/12608788 /改變-t-tick-frequency-on-x-or -y-axis-in-matplotlib – Evert

+0

謝謝,我看了一下,但還是無法想象要做到這一點。我試過這個:'ax.YAxis.set_ticks([10 ** 0,10 **( - 0.1),10 **( - 0.2),10 **( - 0.3)])'但是沒有用。我是matplotlib的新手 – Eddy

+0

您是否在鏈接頁面嘗試了其他任何建議?另外,它應該是'ax.yaxis'; 'ax.YAxis'甚至不存在(儘管可能它在舊的matplotlib版本中)。 – Evert

回答

1

這聽起來像你想剔標籤,沒有刻度馬克尤其如此。在大多數數字中,小刻度標記已經存在於你想要的地方。

下面可能會工作,但我會認爲有一個更簡單的方法。請注意,我只將標籤應用到次要刻度線上:(兩個)主要刻度線已經有一個標籤。不幸的是,兩種刻度標記的字體是不一樣的;我認爲這是LaTeX公式使用的結果。

import numpy as np 
import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 
X = np.logspace(0, 3) 
Y = X**-0.2 
plt.plot(X,Y) 
plt.yscale('log') 
yticks = np.linspace(-0.1, -0.9, 9) 
ax.set_yticks(10**yticks, minor=True) 
ax.set_ylim(0.1, 1) 
ax.set_yticklabels(['$10^{{{:.1f}}}$'.format(ytick) for ytick in yticks], minor=True) 
plt.show() 

導致:

enter image description here

對於不同的標籤字體的問題,您可以手動更改主要刻度標籤:

ax.set_yticks([1, 0.1]) 
ax.set_yticklabels(['$10^0$', '$10^{-1}$']) 

(也可能是相同的對於x軸)。

+0

謝謝,我現在就試試這個。如果沒有其他人能夠想到自動執行此操作的方法,那麼我會將其標記爲已接受。 – Eddy

+0

順便說一句,在'yticks = np.linspace(-0.1,-0.9,9)'中應該是9個刻度,而不是10個。我無法編輯您的提交,因爲必須更改至少6個字符才能進行有效的編輯。 – Eddy

+0

我不知道:我計數了10個小刻度線,而不是9個。 – Evert