如何基于col_1列值为val_1列绘制带清晰图例的差异化颜色图表
解决方案:清晰区分离散类别的散点图绘制
你的问题核心是把离散的col_1值当成连续数值处理了,导致连续配色无法区分数值接近的类别。下面是两种简单有效的解决方法:
方法一:用Seaborn快速实现(推荐)
Seaborn对类别变量的支持更友好,能自动为每个离散类别分配差异明显的颜色,并生成清晰图例:
import seaborn as sns import matplotlib.pyplot as plt # 将col_1转为分类类型,明确告诉工具这是离散类别 df['col_1'] = df['col_1'].astype('category') # 绘制散点图,hue指定按col_1分类,palette选离散配色 sns.scatterplot(data=df, x='val_1', y='col_1', hue='col_1', palette='tab10') # 设置图表标签 plt.xlabel('val_1') plt.ylabel('col_1') plt.title('按col_1分类的散点图') # 显示带标题的图例 plt.legend(title='col_1 取值') plt.show()
方法二:Matplotlib原生手动控制
如果不想用Seaborn,可以手动循环每个col_1的唯一值,分配独立颜色和标签:
import matplotlib.pyplot as plt # 获取col_1的所有唯一值 unique_col1 = df['col_1'].unique() # 选择一组差异明显的离散颜色(tab10是matplotlib默认离散配色) color_list = plt.cm.tab10(range(len(unique_col1))) # 逐个类别绘制散点 for val, color in zip(unique_col1, color_list): # 筛选当前类别的数据 group_data = df[df['col_1'] == val] # 绘制并设置标签 plt.scatter(group_data['val_1'], group_data['col_1'], color=color, label=f'col_1 = {val}') # 设置图表元素 plt.xlabel('val_1') plt.ylabel('col_1') # 显示图例 plt.legend() plt.show()
原代码问题说明
你之前用df.plot.scatter(c='col_1', colormap='jet')时,c='col_1'会把col_1的数值当成连续变量处理,jet是连续渐变配色——数值接近的4.0和6.0、78.0和81.0会得到几乎一样的颜色,自然无法区分。而上面两种方法都是把col_1作为离散类别处理,每个类别分配独立的、差异明显的颜色,完美解决区分问题。
内容的提问来源于stack exchange,提问作者GJ29
相关产品推荐
相关产品推荐

