You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Seaborn图例自动适配并设置自定义数值格式?

自动调整Seaborn散点图图例的数值格式

我需要调整Seaborn散点图的图例,将图例中的数值设置为自定义格式,比如[5,000,000 | 10,000,000]、[5m | 10m]或[0.5 | 1.0 | 1.5](对应十亿单位)。目前用手动设置图例标签的方法太繁琐,希望实现自动调整。

当前使用的代码:

plt.figure(figsize=(8,4), dpi=200)
 
# set styling on a single chart
with sns.axes_style('darkgrid'):
  ax = sns.scatterplot(data=data_clean,
                       x='USD_Production_Budget', 
                       y='USD_Worldwide_Gross',
                       hue='USD_Worldwide_Gross',
                       size='USD_Worldwide_Gross')
 
  ax.set(ylim=(0, 3000000000),
        xlim=(0, 450000000),
        ylabel='Revenue in $ billions',
        xlabel='Budget in $100 millions')

plt.show()

手动设置的方法(希望避免):

plt.figure(figsize=(8,4), dpi=200)
 
# set styling on a single chart
with sns.axes_style('darkgrid'):
  ax = sns.scatterplot(data=data_clean,
                       x='USD_Production_Budget', 
                       y='USD_Worldwide_Gross',
                       hue='USD_Worldwide_Gross',
                       size='USD_Worldwide_Gross')
 
  ax.set(ylim=(0, 3000000000),
        xlim=(0, 450000000),
        ylabel='Revenue in $ billions',
        xlabel='Budget in $100 millions')

plt.legend(title='World_Wide_Gross',loc='upper left',labels=[0,0.5,1.0,1.5,2.0,2.5])
plt.show()

解决方案

核心思路是:获取自动生成的图例标签,提取原始数值后用自定义规则格式化,再重新赋值给图例,无需手动硬编码标签列表。以下是三种常见格式的实现代码:

1. 格式化为千分位(如5,000,000)

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8,4), dpi=200)
with sns.axes_style('darkgrid'):
    ax = sns.scatterplot(data=data_clean,
                         x='USD_Production_Budget', 
                         y='USD_Worldwide_Gross',
                         hue='USD_Worldwide_Gross',
                         size='USD_Worldwide_Gross')
    ax.set(ylim=(0, 3000000000),
           xlim=(0, 450000000),
           ylabel='Revenue in $ billions',
           xlabel='Budget in $100 millions')

# 自定义千分位格式化函数
def format_thousands(num):
    return f"{int(num):,}"

# 获取图例并更新标签
leg = ax.get_legend()
# 跳过第一个标题条目,遍历数值标签
for text in leg.texts[1:]:
    original_val = float(text.get_text())
    text.set_text(format_thousands(original_val))

plt.show()

2. 格式化为百万简写(如5m)

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8,4), dpi=200)
with sns.axes_style('darkgrid'):
    ax = sns.scatterplot(data=data_clean,
                         x='USD_Production_Budget', 
                         y='USD_Worldwide_Gross',
                         hue='USD_Worldwide_Gross',
                         size='USD_Worldwide_Gross')
    ax.set(ylim=(0, 3000000000),
           xlim=(0, 450000000),
           ylabel='Revenue in $ billions',
           xlabel='Budget in $100 millions')

# 自定义百万单位格式化函数
def format_millions(num):
    val_in_m = num / 1_000_000
    return f"{val_in_m:.0f}m" if val_in_m.is_integer() else f"{val_in_m:.1f}m"

# 更新图例标签
leg = ax.get_legend()
for text in leg.texts[1:]:
    original_val = float(text.get_text())
    text.set_text(format_millions(original_val))

plt.show()

3. 格式化为十亿单位(如0.5、1.0)

对应手动设置的需求,将原始数值转换为十亿单位并保留一位小数:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(8,4), dpi=200)
with sns.axes_style('darkgrid'):
    ax = sns.scatterplot(data=data_clean,
                         x='USD_Production_Budget', 
                         y='USD_Worldwide_Gross',
                         hue='USD_Worldwide_Gross',
                         size='USD_Worldwide_Gross')
    ax.set(ylim=(0, 3000000000),
           xlim=(0, 450000000),
           ylabel='Revenue in $ billions',
           xlabel='Budget in $100 millions')

# 自定义十亿单位格式化函数
def format_billions(num):
    val_in_b = num / 1_000_000_000
    return f"{val_in_b:.1f}"

# 更新图例标签
leg = ax.get_legend()
for text in leg.texts[1:]:
    original_val = float(text.get_text())
    text.set_text(format_billions(original_val))

plt.show()

补充说明

  • 如果图例同时包含hue和size的双重标签,可根据标签内容判断是否为数值,再进行格式化
  • 格式化函数可灵活修改,比如添加货币符号$、调整小数位数或增减单位标识

内容的提问来源于stack exchange,提问作者Alight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:27:14