如何用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
相关产品推荐
相关产品推荐

