【问题标题】:Changing x ticks labels iteratively迭代地更改 x 刻度标签
【发布时间】:2021-07-11 04:23:48
【问题描述】:

我想更改我的 x 刻度标签的格式。它们的生成归功于:

range = pd.cut(df['Notional EUR'],
                   bins=[0, 250000, 500000, 1000000, 5000000, 10000000, 50000000, 100000000, 500000000])
range = range.value_counts(sort=False)
range = range.to_frame()
range.columns = ["Effectif"]
chart = sns.barplot(data=range,
                    color = '#F80116',
                    x=range.index.values,
                    y="Effectif")

我想将其格式化为:(0, 250K] 而不是(0, 250000]。 我尝试了几种方法,例如:xlabels = [f'({l:.2f}, {r:.2f}]'+'K' for l, r in chart.get_xticks()/1000] 但没有成功...

这是相关图表:

感谢您的帮助。

【问题讨论】:

  • 你的绘图代码是什么?一般可以使用ax.set_xticklabels(xlabels)
  • 我已经在问题中添加了它!

标签: python pandas


【解决方案1】:

如果您希望所有标签缩写为K(包括像5000K),请将所有000([\]\),])模式替换为K\1

xticklabels = [re.sub(r'000([\]\),])', r'K\1', label.get_text()) for label in chart.get_xticklabels()]
chart.set_xticklabels(xticklabels)

如果您希望标签自适应缩写(KM 等),您可以使用 this human_format() function 之类的名称:

# adapted from https://stackoverflow.com/a/49955617/13138364
def human_format(match):
    num = int(match.group(0))
    magnitude = 0
    while abs(num) >= 1000:
        magnitude += 1
        num = round(num / 1000.0)
    abbr = ['', 'K', 'M', 'G', 'T', 'P'][magnitude]
    return f'{num:.0f}{abbr}'

xticklabels = [re.sub(r'([0-9]+)', human_format, label.get_text()) for label in chart.get_xticklabels()]
chart.set_xticklabels(xticklabels)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2020-10-09
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多