在matplotlib中更改x轴刻度

时间:2012-07-20 10:38:26

标签: python matplotlib

我使用Matlab

创建了这个图

enter image description here

使用matplotlib,x轴可以绘制大数,例如100000,200000,300000。我希望有1,2,3和10 ^ 5之类的东西来表明它实际上是100000,200000,300000。 / p>

有没有一种简单的方法可以在matplotlib中创建这样的比例?

4 个答案:

答案 0 :(得分:116)

尝试使用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 :(得分:13)

这不是对原始问题的回答,而是您在问题正文中提出的一个问题。

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

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)

答案 2 :(得分:11)

scalar formatter支持收集指数。文档如下:

  

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

答案 3 :(得分:8)

我找到了简单的解决方案

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