python - 迭代地更改 x 刻度标签
问题描述
我想更改我的 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]
但没有成功...
以下是相关图表:
谢谢你的帮助。
解决方案
如果您希望所有标签都缩写为K
(包括 like 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)
如果您希望标签自适应地缩写(K
,M
等),您可以使用类似以下human_format()
功能的东西:
# 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)
推荐阅读
- sql - 如何执行 SQL 查询而不在 Postgres 中显示结果
- c# - 使用 css 为 MonthlyTrigger 选择多个月份
- php - WebSocket 不适用于 https 请求,并且它与使用 PHP 棘轮库的 http 一起正常工作
- scala - 从 Kafka 读取到 Flink Scala Shell
- symfony - 带有 AND 和 OR 的查询生成器
- python - 使用 Tkinter Treeview 进行数据库处理时无法查看图像
- python - 如何查找与当前文件具有匹配模式的文件并合并?
- c# - 自定义 foreach 中的收益回报未按预期工作
- android - 双 Android SDK 文件夹
- django - 从 Django 的 ArrayAgg 中排除空值