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

如何基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:35:19