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

如何用Seaborn创建以french和flemish为X轴、year为hue的直方图?

解决方案

你的需求本质是绘制分组柱状图(而非传统意义上的直方图,直方图用于展示连续数据的分布),原代码无法实现的原因有两个:一是数据为宽格式,Seaborn无法同时将french和flemish作为X轴的分类项;二是histplot默认统计频数,而非直接展示列的数值大小。

步骤1:将宽格式数据转换为长格式

使用pandas的melt函数,把french和flemish合并为一个分类列,同时保留年份和对应数值:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 转换数据格式
df_long = df.melt(
    id_vars='year',          # 保留作为分组依据的列
    var_name='region',       # 新分类列的名称(对应french/flemish)
    value_name='value'       # 数值列的名称
)

步骤2:绘制分组柱状图

方法1:使用barplot(更适合展示分类数据的数值)

这是最贴合你需求的方式:

sns.barplot(
    data=df_long,
    x='region',    # X轴为地区分类(french/flemish)
    y='value',     # Y轴为对应数值
    hue='year',    # 按年份分组
    dodge=True     # 分组柱状图错开显示
)
plt.title('French vs Flemish Values by Year')
plt.show()

方法2:使用histplot(若坚持用该函数)

需要指定stat='identity'来直接展示数值,而非统计频数:

sns.histplot(
    data=df_long,
    x='region',
    y='value',
    hue='year',
    multiple='dodge',
    stat='identity',    # 关键参数:直接使用数据中的数值
    shrink=.8
)
plt.title('French vs Flemish Values by Year')
plt.show()

两种方法都会生成X轴为french和flemish、按年份分组、Y轴显示对应数值的图表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:05:14