设置y轴,单位为百万

问题描述 投票:0回答:3

我对此图有问题:

[![在此处输入图片描述] [1]] [1]

y轴以单位为单位,但我需要以百万为单位:

[![在此处输入图片描述] [2]] [2]

您知道实现此目标的方法吗?预先感谢。

python pandas matplotlib axis
3个回答
1
投票

您可以使用这样的自定义FuncFormatter:

from matplotlib.ticker import FuncFormatter
import matplotlib.pyplot as plt
def millions(x, pos):
    'The two args are the value and tick position'
    return '%1.1fM' % (x * 1e-6)


formatter = FuncFormatter(millions)

fig, ax = plt.subplots()
ax.yaxis.set_major_formatter(formatter)

或者您甚至可以用以下功能替换数百万个以支持所有大小:


def human_format(num, pos):
    magnitude = 0
    while abs(num) >= 1000:
        magnitude += 1
        num /= 1000.0
    # add more suffixes if you need them
    return '%.2f%s' % (num, ['', 'K', 'M', 'G', 'T', 'P'][magnitude])


0
投票

您可以使用FuncFormatter

FuncFormatter

from matplotlib import pyplot as plt from matplotlib.ticker import FuncFormatter def millions_formatter(x, pos): return f'{x / 1000000}' fig, ax = plt.subplots() ax.plot([1, 2], [1000000, 5000000]) ax.yaxis.set_major_formatter(FuncFormatter(millions_formatter)) ax.set_ylabel('value (in millions)') plt.show()


0
投票
resulting plot

import pandas as pd import matplotlib .pyplot as plt import matplotlib.ticker as ticker fig, ax=plt.subplots() ax.plot([1, 2], [1000000, 5000000]) scale_y = 1e6 ticks_y = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale_y)) ax.yaxis.set_major_formatter(ticks_y) ax.set_ylabel('val in millions')

© www.soinside.com 2019 - 2024. All rights reserved.