matplotlib 更改x轴比例

6jygbczu  于 2023-04-06  发布在  其他
关注(0)|答案(4)|浏览(174)

我用Matlab创建了这个图

使用matplotlib,x-axes可以画出很大的数字,比如100000,200000,300000。我想用1,2,3和10^5来表示它实际上是100000,200000,300000。
在matplotlib中有没有简单的方法来创建这样的规模?

q9yhzks0

q9yhzks01#

尝试使用matplotlib.pyplot.ticklabel_format

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

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

nsc4cvqm

nsc4cvqm2#

这并不是回答你原来的问题,而是回答你在问题中提出的一个问题。
一个小小的序言,这样我的命名就不会显得奇怪了:

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)或者直接设置它们来改变它的显示方式。我还没有找到比在'1 e'和'x10^'科学记数法之间转换更优雅的方法:

ax.xaxis.major.formatter._useMathText = True

这应该会给予你更多的Matlab-esc,而且确实可以说是更好的外观。我认为下面应该做同样的事情:

rc('text', usetex=True)
ruarlubt

ruarlubt3#

标量格式化器支持收集指数,文档如下:
class matplotlib.ticker.ScalarFormatter(useOffset=True,useMathText=False,useLocale=None)基础:matplotlib.ticker.Formatter
刻度位置是一个普通的旧数字。如果useOffset==True且数据范围远小于数据平均值,则将确定偏移量,以便刻度标签有意义。科学计数法用于data〈10^-n或data〉= 10^m,其中n和m是使用set_powerlimits设置的功率限制((n,m))。它们的默认值由axes.formatter.limits rc参数控制。
你的技巧是

from matplotlib.ticker import ScalarFormatter
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)

要得到这样的结果:

hs1ihplo

hs1ihplo4#

我找到了一个简单的解决办法

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

相关问题