为了账号安全,请及时绑定邮箱和手机立即绑定

xx 格式科学风格 y-ticks matplotlib

xx 格式科学风格 y-ticks matplotlib

慕娘9325324 2021-12-17 16:48:07
我正在使用 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))这通常是一致的,但有时我会在格式中获取 y 轴上的值x.x,有时我会得到x.xx,但我并不觉得它很优雅。有没有办法强制 matplotlib 以一种格式始终为我提供 y 值,例如x.x通过动态缩放科学符号?这是我不喜欢的示例图:
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

您可以根据数据中的最大值动态设置限制:


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


查看完整回答
反对 回复 2021-12-17
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信