我正在使用matplotlib创建一些图。
对于情节,我将style='sci'
与scilimits=(0,0)
一起使用
代码如下:
for key in urbs_values.keys():
# y-Axis (values)
u[key] = np.array(urbs_values[key])
o[key] = np.array(oemof_values[key])
# draw plots
plt.plot(i, u[key], label='urbs_'+str(key), linestyle='None', marker='x')
plt.ticklabel_format(axis='y', style='sci', scilimits=(0, 0))
plt.plot(i, o[key], label='oemof_'+str(key), linestyle='None', marker='.')
plt.ticklabel_format(axis='y', style='sci', scilimits=(0, 0))
这通常是一致的,但是有时我会以x.x
的格式在y轴上获取值,有时会得到x.xx
的y轴,但我并不觉得它很优雅。
是否有一种方法可以通过动态缩放科学符号来强制matplotlib以x.x
之类的格式始终为我提供y值?
这是我不喜欢的示例情节:
答案 0 :(得分:0)
您可以根据数据中的最大值动态设置限制:
def grabMaxExponent(values, precision=1):
"""Given a list of numericals, returns the exponent of the max
value in scientific notation, adjusted to have no sig figs in
decimal places.
e.g. 190 > 1.9E+02 > 19E+01
returns exponent (1)"""
# Grab max value and convert to scientific notation
value = format(max(values), f"5.{precision}E")
# Pull exponent
a,m = value.split('E+')
a,b = a.split('.')
a,b,m = map(int, (a,b,m))
# If significant figures non-zero, increase exponent to bring them before decimal point
if b > 0:
m-=precision
return m
m = grabMaxExponent(y)
# Set scilimits to m
plt.ticklabel_format(axis='y', style='sci', scilimits=(m,m))
https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.ticklabel_format.html