更改matplotlib中的x轴比例

我使用Matlab创build了这个图

在这里输入图像说明

使用matplotlib,x-axies会绘制大的数字,例如100000,200000,300000.我想要有一些像1,2,3和10 ^ 5来表明它实际上是100000,200000,300000。

有一个简单的方法来创build这样的规模在matplotlib?

尝试使用matplotlib.pyplot.ticklabel_format

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

这将科学记数法(即ax 10^b )应用于您的x轴tickmarks

标量格式化程序支持收集指数。 文档如下:

class matplotlib.ticker.ScalarFormatter(useOffset = True,useMathText = False,useLocale = None)基础: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。

在图像之后

你也可以使用:

 xfmt.set_useOffset(10000) 

为了得到这样的结果:

在这里输入图像说明

我find了简单的解决scheme

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

这并不是对你原来的问题的回答,而是你在问题中提到的其中一个问题。

一个小序言,让我的命名似乎并不奇怪:

 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)