在matplotlib中更改x轴刻度

Eag*_*gle 81 python matplotlib

我用Matlab创建了这个图

在此输入图像描述

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

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

Chr*_*ris 131

尝试使用matplotlib.pyplot.ticklabel_format:

import matplotlib.pyplot as plt
...
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
Run Code Online (Sandbox Code Playgroud)

这将科学记数法(即a x 10^b)应用于您的x轴刻度线

  • `ticklabel_format`也是轴对象的一种方法,你可以试试像`ax.ticklabel_format(style ='sci',axis ='x',scilimits =(0,0))` (23认同)
  • 是否可以添加偏移量?(例如,代替0.0,0.5,1.0,1.5,......和x 10 ^ b,它将是0,5,10,15,......和x 10 ^ {b-1}) (8认同)
  • @Eagle对不起,您关于添加偏移量的后续问题就是我所指的问题。我的x轴是`[0.1,0.2,...]`,我更喜欢`[1,2,...]`具有调整后的指数。您能够为此找到解决方案吗? (2认同)

小智 14

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

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

import matplotlib
from matplotlib import rc
from matplotlib.figure import Figure
ax = self.figure.add_subplot( 111 )
Run Code Online (Sandbox Code Playgroud)

如前所述,您可以使用ticklabel_format指定matplotlib应使用科学计数法来表示大值或小值:

ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both')
Run Code Online (Sandbox Code Playgroud)

您可以使用rcParams中的标志(来自matplotlib import rcParams)或直接设置它们来影响显示方式.我没有找到一种更优雅的方式来改变'1e'和'x10 ^'科学记数法,而不是:

ax.xaxis.major.formatter._useMathText = True
Run Code Online (Sandbox Code Playgroud)

这应该给你更多Matlab-esc,实际上可以说是更好的外观.我认为以下内容应该这样做:

rc('text', usetex=True)
Run Code Online (Sandbox Code Playgroud)


Car*_* F. 11

标量格式支持收集的指数.文档如下:

class matplotlib.ticker.ScalarFormatter(useOffset = True,useMathText = False,useLocale = None)Bases:matplotlib.ticker.Formatter

Tick位置是一个普通的旧号码.如果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)
Run Code Online (Sandbox Code Playgroud)

要以格式显示指数x10^5,请使用ScalarFormatter实例化useMathText=True.

图像之后

你也可以使用:

xfmt.set_useOffset(10000)
Run Code Online (Sandbox Code Playgroud)

要得到这样的结果:

在此输入图像描述

  • 用`useMathText = True`实例化ScalarFormatter得到`x10 ^ 4`. (3认同)

cun*_*ang 8

我找到了简单的解决方案

pylab.ticklabel_format(axis='y',style='sci',scilimits=(1,4))
Run Code Online (Sandbox Code Playgroud)