带有数千个逗号刻度标签的 MatPlotLib 美元符号

Posted

技术标签:

【中文标题】带有数千个逗号刻度标签的 MatPlotLib 美元符号【英文标题】:MatPlotLib Dollar Sign with Thousands Comma Tick Labels 【发布时间】:2016-11-04 06:37:03 【问题描述】:

给定以下条形图:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame('A': ['A', 'B'], 'B': [1000,2000])

fig, ax = plt.subplots(1, 1, figsize=(2, 2))

df.plot(kind='bar', x='A', y='B',
        align='center', width=.5, edgecolor='none', 
        color='grey', ax=ax)
plt.xticks(rotation=25)
plt.show()

我想将 y-tick 标签显示为数千美元,如下所示:

2,000 美元

我知道我可以用它来添加美元符号:

import matplotlib.ticker as mtick
fmt = '$%.0f'
tick = mtick.FormatStrFormatter(fmt)
ax.yaxis.set_major_formatter(tick)

...这要添加一个逗号:

ax.get_yaxis().set_major_formatter(
     mtick.FuncFormatter(lambda x, p: format(int(x), ',')))

...但是我如何同时获得两者?

提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用StrMethodFormatter,它使用str.format() 规范迷你语言。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick

df = pd.DataFrame('A': ['A', 'B'], 'B': [1000,2000])

fig, ax = plt.subplots(1, 1, figsize=(2, 2))
df.plot(kind='bar', x='A', y='B',
        align='center', width=.5, edgecolor='none', 
        color='grey', ax=ax)

fmt = '$x:,.0f'
tick = mtick.StrMethodFormatter(fmt)
ax.yaxis.set_major_formatter(tick) 
plt.xticks(rotation=25)

plt.show()

【讨论】:

有没有办法让它变成 1K、2K、.. 代替? 值得注意的是令人讨厌的令人困惑的方法名称:StrMethodFormatterFormatStrFormatter【参考方案2】:

您还可以使用get_yticks() 获取显示在 y 轴(0、500、1000 等)上的值的数组,并使用set_yticklabels() 设置格式化值。

df = pd.DataFrame('A': ['A', 'B'], 'B': [1000,2000])

fig, ax = plt.subplots(1, 1, figsize=(2, 2))

df.plot(kind='bar', x='A', y='B', align='center', width=.5, edgecolor='none', 
        color='grey', ax=ax)

--------------------Added code--------------------------
# getting the array of values of y-axis
ticks = ax.get_yticks()
# formatted the values into strings beginning with dollar sign
new_labels = [f'$int(amt)' for amt in ticks]
# Set the new labels
ax.set_yticklabels(new_labels)
-------------------------------------------------------
plt.xticks(rotation=25)
plt.show()

【讨论】:

以上是关于带有数千个逗号刻度标签的 MatPlotLib 美元符号的主要内容,如果未能解决你的问题,请参考以下文章

Python / Matplotlib:带有contourf的颜色条不尊重自定义cmap的刻度标签

在matplotlib颜色栏中隐藏每个第n个刻度标签的最干净方法?

整数刻度标签 matplotlib,没有原点刻度标签

matplotlib 中轴标签文本顶部的位置是啥?

Matplotlib 对数刻度刻度标签数字格式

matplotlib 刻度标签锚 - 右对齐刻度标签(在右侧轴上)并将刻度标签的左(西)侧“剪辑”到轴