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

Julia散点图:基于点颜色添加图例及代码优化咨询

Julia PyPlot 分类绘图优化及正确图例添加方法

你当前图例重复的问题,是因为循环中每个数据点都设置了label,导致图例把每个点的标签都重复列出来了。下面提供两种解决方案,兼顾代码简洁性和大数据量效率:

方案一:按类别批量绘图(推荐,适合大数据量)

直接按类别分组筛选数据,批量绘制同类别点,每个类别仅添加一次标签,既高效又能生成正确图例:

using PyPlot

# 定义类别与颜色的映射字典,替代原函数
color_map = Dict("male" => "blue", "female" => "red", "n/a" => "black")
# 索引-类别映射
my_dict = Dict(1 => "male", 2 => "female", 3 => "male", 4 => "n/a", 5 => "male", 6 => "female")

x = [1,2,3,4,5,6]
y = [3,4,5,6,7,8]

plt.figure(figsize=(14,2.5))

# 遍历每个类别,批量绘制对应数据点
for category in keys(color_map)
    # 筛选当前类别的所有索引
    indices = [idx for idx in keys(my_dict) if my_dict[idx] == category]
    # 提取对应x、y数据
    x_group = x[indices]
    y_group = y[indices]
    # 批量绘图,每个类别仅设置一次label
    plot(x_group, y_group, "o", color=color_map[category], label=category)
end

plt.legend()
plt.show()

优化点说明

  • 用color_map直接映射类别与颜色,替代原point_colour函数,代码更简洁
  • 按类别批量处理数据,避免循环每个点,对7255条数据的场景效率更高
  • 每个类别仅添加一次label,图例自动正确显示唯一类别

方案二:保留单循环逻辑(适合特殊场景)

如果需要保留逐个点绘制的逻辑,可以通过标记已出现的类别,仅在第一次遇到时设置标签,后续点隐藏图例:

using PyPlot

my_dict = Dict(1 => "male",2 => "female",3=> "male", 4=> "n/a",5 => "male",6 => "female")
color_map = Dict("male"=>"blue", "female"=>"red", "n/a"=>"black")

x=[1,2,3,4,5,6]
y=[3,4,5,6,7,8]

plt.figure(figsize=(14,2.5))
# 记录已处理过的类别
seen_cats = Set()

for i in 1:length(x)
    cat = my_dict[i]
    col = color_map[cat]
    # 仅首次出现该类别时设置正常标签,后续点不显示在图例
    label = cat in seen_cats ? "_nolegend_" : cat
    plot(x[i], y[i], "o", color=col, label=label)
    push!(seen_cats, cat)
end

plt.legend()
plt.show()

内容的提问来源于stack exchange,提问作者sarl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:33:24