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

使用Seaborn绘制DataFrame:索引为X轴、值为Y轴的散点图问题

问题描述

原始数据构建代码:

import pandas as pd
import seaborn as sns
df = pd.DataFrame({'Jim': {'ball': 5, 'bat': 8}, 'Nancy': {'ball': 9, 'bat': 10}}).T

需求:

  • X轴显示Jim和Nancy
  • Y轴显示1-10的数值
  • 点按bat和ball数据分色并附带图例

尝试的方法及问题:

  1. 循环列绘制:
for _, series in df.iteritems():
    sns.scatterplot(x=df.index, y=series)

问题:Y轴标签固定为ball,无图例,效果不符合预期。

  1. 直接传入整个DataFrame:
sns.scatterplot(x=df.index, y=df, hue=df.columns)

问题:报错ValueError: Data must be 1-dimensional,Seaborn的y参数仅支持一维数据。

解决方案

Seaborn对**长格式(long-form)**数据的支持更好,需先转换数据结构再绘制:

1. 转换为长格式数据

用pandas.melt()重塑数据:

df_long = df.reset_index().melt(id_vars='index', var_name='item', value_name='count')
df_long.columns = ['person', 'item', 'count']  # 重命名列,提升可读性

转换后的数据结构:

personitemcount
Jimball5
Nancyball9
Jimbat8
Nancybat10

2. 绘制符合需求的散点图

基于长格式数据传入对应参数即可:

sns.scatterplot(data=df_long, x='person', y='count', hue='item')

此代码可实现:

  • X轴显示Jim和Nancy
  • Y轴展示1-10的数值范围
  • 点按bat/ball分色,自动生成对应图例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:25:19