如何在散点图中用不同颜色区分数据点?附代码与样本数据
按类别区分散点图颜色的解决方案
嘿,我来帮你调整代码,实现用不同颜色区分不同数据点~从你的数据来看,Gender列(0和1)是完美的分组依据,我们可以基于它来给每个点分配不同颜色。
核心思路
原来的plt.plot只能批量设置同一种样式的点,而plt.scatter支持为每个点单独指定颜色,正好满足你的需求。我们可以直接把Gender列作为颜色参数,或者自定义颜色映射让类别更直观。
方案1:使用默认颜色映射快速实现
这个方案最简洁,利用matplotlib的内置颜色映射自动区分Gender的0和1:
import pandas as pd import matplotlib.pyplot as plt # 用原始字符串避免Windows路径的转义问题(也可以把\换成//) data1 = pd.read_csv(r'F:\HCSE\sample_data1.csv', sep=';') colnames = data1.columns # 使用scatter绘图,c参数指定颜色由Gender列决定 scatter_plot = plt.scatter( x=data1.iloc[:, 0], # Age列 y=data1.iloc[:, 2], # LOS列 c=data1['Gender'], # 按Gender分配颜色 cmap='viridis', # 可选的颜色映射,比如'coolwarm'也很好看 alpha=0.7 # 点的透明度,避免重叠时看不清 ) # 设置坐标轴标签 plt.ylabel(colnames[2]) plt.xlabel(colnames[0]) # 添加图例,解释颜色对应的Gender类别 plt.legend( handles=scatter_plot.legend_elements()[0], labels=['Female', 'Male'], # 根据你的数据定义0和1对应的含义 title='Gender' ) plt.show()
方案2:自定义颜色映射(更灵活)
如果你想指定特定颜色对应某个Gender,比如0用红色,1用蓝色,可以用自定义映射:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.patches import Patch data1 = pd.read_csv(r'F:\HCSE\sample_data1.csv', sep=';') colnames = data1.columns # 自定义颜色映射:key是Gender值,value是颜色代码/名称 gender_color_map = { 0: '#ff6b6b', # 珊瑚红 1: '#4ecdc4' # 薄荷绿 } # 把每个Gender值映射成对应的颜色 point_colors = data1['Gender'].map(gender_color_map) plt.scatter( x=data1.iloc[:, 0], y=data1.iloc[:, 2], c=point_colors, alpha=0.7 ) # 设置坐标轴标签 plt.ylabel(colnames[2]) plt.xlabel(colnames[0]) # 创建自定义图例 legend_elements = [ Patch(facecolor=gender_color_map[0], label='Female'), Patch(facecolor=gender_color_map[1], label='Male') ] plt.legend(handles=legend_elements, title='Gender') plt.show()
小提示
- 路径问题:Windows路径里的
\会被当作转义字符,所以用r'路径'原始字符串或者把\换成//更稳妥 - 如果你的数据里有更多类别(比如Gender有3个值),这两种方案依然适用,颜色映射会自动扩展
alpha参数可以让点半透明,当数据点重叠时更容易看清分布
内容的提问来源于stack exchange,提问作者ehsun
相关产品推荐
相关产品推荐

