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

如何用Pandas和Seaborn绘制多X轴分类散点图?

解决Seaborn绘制多列分类散点图的问题

你的核心问题是当前代码把三列数据都叠加到了相同的X轴类别上,导致所有点重叠在一起,没有实现每个X类别对应单独列数据的效果。要解决这个问题,关键是把宽格式的数据转换为长格式,Seaborn的分类绘图函数对长格式数据支持更好。

当前代码的问题

你多次调用sns.stripplot时,x参数都用了dfx['CHAR'],这会让三列的所有数据点都分别画在"S1_1"、"S1_2"、"S1_3"这三个X类别上,最终三个列的点完全重叠,无法区分。另外dfx这个DataFrame是多余的,完全不需要单独创建。

正确实现代码

使用pd.melt将你的宽格式数据转换为长格式,让每个数据点都对应一个类别标签和数值,之后只需一次调用stripplot就能生成符合预期的图表:

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

# 加载Excel数据
df = pd.read_excel("panda.xlsx")

# 转换为长格式:将目标列转换为类别-数值的结构
melted_df = df.melt(var_name="CHAR", value_name="Measurement")

# 绘制分类散点图,jitter参数让同类别点分散避免重叠
sns.stripplot(x="CHAR", y="Measurement", data=melted_df, color='black', jitter=True)

plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.show()

代码说明

  • pd.melt:把原来的宽格式(每列对应一个类别)转成长格式,生成两列:CHAR(存储类别名称S1_1/S1_2/S1_3)和Measurement(存储对应列的9个测量值)。
  • jitter=True:可选参数,让同一类别下的点稍微水平分散,避免完全重叠,更清晰展示数据分布。

这样生成的图表会在X轴上显示三个独立类别,每个类别下对应该列的全部测量值点,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:50:17