2012-07-20 306 views
49

我創造了利用Matlab更改X軸在matplotlib

enter image description here

使用matplotlib該地塊規模,X-軸距吸引大批如100000,200000 300000我想有像1 ,2,3和10^5來表明它實際上是100000,200000,300000.

有沒有一種簡單的方法來在matplotlib中創建這樣的比例尺?

回答

80

嘗試使用matplotlib.pyplot.ticklabel_format

import matplotlib.pyplot as plt 
... 
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0)) 

這適用科學記數法(即a x 10^b)到您的x軸刻度線

+1

工作,謝謝。 – Eagle 2012-07-20 13:06:37

+6

是否可以添加偏移量? (例如,代替0.0,0.5,1.0,1.5,...和x 10^b,它將是0,5,10,15,...和x 10^{b-1}) – Eagle 2012-07-20 13:20:22

+9

'ticklabel_format'也是一個方法的軸對象,你可以嘗試像 'ax.ticklabel_format(style ='sci',axis ='x',scilimits =(0,0))' – Covich 2016-03-22 10:47:33

11

scalar formatter支持收集的指數。該文檔如下:

類matplotlib.ticker.ScalarFormatter(useOffset =真, useMathText =假,useLocale =無)鹼:matplotlib.ticker.Formatter

蜱位置是一個普通的舊數。如果useOffset == True且數據範圍遠小於數據平均值,則將確定一個偏移量 ,以使刻度標籤有意義。科學 符號用於數據< 10^-n或數據> = 10^m,其中n和m是使用set_powerlimits((n,m))設置的功率限制。 的默認值由axes.formatter.limits rc參數控制。

你的技術是:

xfmt = ScalarFormatter() 
xfmt.set_powerlimits((-3,3)) # Or whatever your limits are . . . 
{{ Make your plot }} 
gca().xaxis.set_major_formatter(xfmt) 

要獲得格式x10^5顯示的指數,與useMathText=True實例化ScalarFormatter。

After Image

您還可以使用:

xfmt.set_useOffset(10000) 

爲了得到這樣的結果:

enter image description here

+0

我喜歡這個解決方案,但我更喜歡'x10^4'而不是'1e4' – Eagle 2012-07-20 13:36:21

+0

我同意。我相信這是可能的,但我不知道如何。 – 2012-07-27 12:58:02

+2

用'useMathText = True'實例化ScalarFormatter以獲得'x10^4'。 – 2015-03-06 16:39:48

8

我找到簡單的解決方案

pylab.ticklabel_format(axis='y',style='sci',scilimits=(1,4)) 
9

這不是對你的原始問題的回答,而是你在問題主體中的其中一個查詢。

小序言,讓自己的命名似乎並不奇怪:

import matplotlib 
from matplotlib import rc 
from matplotlib.figure import Figure 
ax = self.figure.add_subplot(111) 

正如所提到的,您可以使用ticklabel_format指定matplotlib應該用科學計數法或大或小的值:

ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both') 

您可以使用rcParams中的標誌(來自matplotlib import rcParams)或通過直接設置它們來影響顯示方式。我還沒有發現「1E」和「X10 ^」科學記數法比之間改變一個更優雅的方式:

ax.xaxis.major.formatter._useMathText = True 

這應該給你更多的Matlab的ESC,確實可以說是更好的外觀。我認爲以下應該做同樣的:

rc('text', usetex=True) 
+0

是啊,它不漂亮,但它的作品,謝謝! – 2017-02-28 07:43:56

+0

它仍然有效:-) – uhoh 2018-02-16 02:29:43