我使用Matlab创建了这个图
使用matplotlib,x轴绘制大量数字,例如100000、200000、300000。我想使用类似1、2、3和10 ^ 5的数字来表示它实际上是100000、200000、300000。
有没有一种简单的方法可以在matplotlib中创建这种比例?
Answers:
尝试使用matplotlib.pyplot.ticklabel_format
:
import matplotlib.pyplot as plt
...
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
这a x 10^b
会将科学计数法(即)应用于您的x轴刻度线
ticklabel_format
也是轴对象的一种方法,您可以尝试类似的方法ax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
[0.1, 0.2, ...]
并且我希望[1, 2, ...]
使用调整后的指数。您能够为此找到解决方案吗?
这并不是您对原始问题的答案,而是对您在问题正文中所提出的疑问之一的答案。
些许序言,以便我的名字看起来并不奇怪:
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导入rcParams中)或直接设置它们来影响显示方式。我还没有找到比“ 1e”和“ x10 ^”科学计数法更优雅的方法:
ax.xaxis.major.formatter._useMathText = True
这应该为您提供更多的Matlab-esc,甚至可以说是更好的外观。我认为以下应该做的相同:
rc('text', usetex=True)
的标量格式器支撑件收集的指数。该文档如下:
类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参数控制。
您的技术将是:
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
,请使用实例化ScalarFormatter useMathText=True
。
您还可以使用:
xfmt.set_useOffset(10000)
要获得这样的结果:
useMathText=True
以获取x10^4
。