Python Pandas数据框重构与散点图绘制:实现数值对应分类、按另一类别着色的可视化方案
如何绘制「分类关联+按另一分类着色」的散点图
没问题!我帮你一步步搞定这个散点图需求——首先得把你的宽格式数据转成可视化友好的长格式,然后用Matplotlib/Seaborn或者Plotly都能轻松实现目标。
第一步:重构Pandas数据框
你的原始数据是宽格式(每列对应一种疾病),但这类分类可视化需要长格式(把所有疾病的数值统一放到一列,同时新增一列标记疾病类型)。用Pandas的melt()方法就能一键转换:
import pandas as pd # 模拟你的原始数据框(替换成你自己的df即可) df = pd.DataFrame({ 'gender': ['male', 'female', 'male', 'female'], 'disease1': [0.82, 0.75, 0.80, 0.78], 'disease2': [0.76, 0.93, 0.79, 0.91] }) # 转换为长格式 long_df = df.melt( id_vars='gender', # 保留不变的分类列(性别) var_name='disease', # 新生成的疾病类型列名 value_name='score' # 数值列的名称 )
转换后的数据框长这样:
| gender | disease | score |
|---|---|---|
| male | disease1 | 0.82 |
| female | disease1 | 0.75 |
| male | disease2 | 0.76 |
| female | disease2 | 0.93 |
第二步:用Matplotlib+Seaborn绘制静态散点图
Seaborn是Matplotlib的封装库,对分类数据可视化更友好,代码简洁易读:
import seaborn as sns import matplotlib.pyplot as plt # 设置绘图风格 sns.set_style("whitegrid") # 核心绘图代码:x轴是疾病分类,y轴是数值,hue参数按性别着色 sns.scatterplot( data=long_df, x='disease', y='score', hue='gender', s=100, # 调整点的大小 palette='Set2' # 自定义配色方案 ) # 添加标题和标签 plt.title('Score Distribution by Disease and Gender', fontsize=14) plt.xlabel('Disease Type', fontsize=12) plt.ylabel('Score', fontsize=12) # 调整图例 plt.legend(title='Gender') # 显示图形 plt.show()
第三步:用Plotly Express绘制交互式散点图
如果想要支持鼠标悬停查看详情、点击图例筛选的交互式图表,Plotly Express是最佳选择:
import plotly.express as px # 生成交互式散点图 fig = px.scatter( long_df, x='disease', y='score', color='gender', # 按性别着色 size_max=30, # 点的最大尺寸 title='Score Distribution by Disease and Gender', labels={'score': 'Score', 'disease': 'Disease Type'} # 自定义轴标签 ) # 优化布局细节 fig.update_layout( xaxis_title='Disease Type', yaxis_title='Score', legend_title='Gender' ) # 显示交互式图表 fig.show()
内容的提问来源于stack exchange,提问作者Tclha
相关产品推荐
相关产品推荐

