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

如何用gnuplot绘制含3个分类变量的散点图并重现Julia图表?

优化Gnuplot散点图实现:Param1映射颜色、Param2映射标记并统一图例

需求说明

基于给定CSV数据绘制散点图,要求:

  • 将Param1的不同值映射为不同颜色
  • 将Param2的不同值映射为不同标记形状
  • 生成统一的图例,清晰对应每个(Param1, Param2)组合

原始CSV数据

Sensitivity,Recall,ID,Param1,Param2
0.89,0.551,run1,A1,alpha1
0.93,0.78,run1,A2,alpha2
0.54,0.76,run1,A2,alpha3
0.95,0.99,run2,A1,alpha1
0.354,0.445,run3,A1,alpha1
0.89,0.72,run4,A2,alpha1

原尝试代码

set datafile separator comma
set terminal pngcairo
set output "test2.png"
set multiplot layout 1,2
set xlabel "A1"
plot for [i=2:4] 'test2.csv' index "A1" u 1:i title columnhead(i) ps 3
set xlabel "A2"
plot for [i=2:4] 'test2.csv' index "A2" u 1:i title columnhead(i) ps 3
unset multiplot

优化方案

无需拆分数据或使用多图,直接在单图中通过条件筛选和样式映射实现,同时保证图例统一。核心是利用Gnuplot的字符串匹配筛选数据,提前定义颜色和标记的映射规则:

set datafile separator comma
set terminal pngcairo size 800,600 enhanced font 'Arial,10'
set output "scatter_plot.png"

# 定义Param1到颜色的映射:A1=红色,A2=蓝色
set palette defined (0 '#ff0000', 1 '#0000ff')
# 定义Param2到标记形状的映射:alpha1=圆圈,alpha2=方块,alpha3=三角
markers = [7, 8, 9]
param2_vals = ["alpha1", "alpha2", "alpha3"]
param1_vals = ["A1", "A2"]

# 设置坐标轴和图例样式
set xlabel "Sensitivity"
set ylabel "Recall"
set key outside right top box  # 图例放在外部避免遮挡数据
set style data points

# 遍历所有参数组合,绘制对应数据点
plot for [p1 in param1_vals] \
     for [p2_idx=1:|param2_vals|] \
     'test2.csv' u 1:2 \
     where strcol(4) eq p1 and strcol(5) eq param2_vals[p2_idx] \
     lc palette frac (p1 eq "A1" ? 0 : 1) \
     pt markers[p2_idx] \
     ps 1.5 \
     title sprintf("%s - %s", p1, param2_vals[p2_idx])

方案优势

  • 无需预处理数据:不用手动拆分CSV或添加新列,直接通过where语句筛选目标数据
  • 样式统一可控:提前定义颜色和标记映射,确保每个参数组合的样式固定且可修改
  • 图例清晰一致:自动生成每个(Param1, Param2)组合的标签,避免多图图例不一致问题
  • 单图直观对比:所有数据点集中展示,便于对比不同参数组合下的Sensitivity和Recall分布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:48:21