如何用gnuplot在同一文件中绘制带分类标记的散点图?
创建包含数据的Gnuplot散点图(指令+数据同文件)
没问题,我经常把Gnuplot的绘图指令和数据放在同一个文件里,这样管理起来特别方便,尤其是针对你这种按第三列类别区分点样式的需求。下面直接给你完整的示例文件,你可以直接拿去改数据用:
# 基础绘图设置 set terminal pngcairo enhanced font 'Arial,10' size 800,600 set output 'scatter_plot.png' # 设置坐标轴标签和标题 set xlabel 'X 坐标' set ylabel 'Y 坐标' set title '按类别区分的散点图' # 设置点样式和颜色映射:用第三列的字符串类别来对应不同样式 # 先定义每个类别的点样式和颜色 set style line 1 pt 7 lc rgb '#e74c3c' # BDD-LEFT:红色实心圆 set style line 2 pt 5 lc rgb '#3498db' # BDD-HASH:蓝色空心菱形 set style line 3 pt 9 lc rgb '#2ecc71' # %BDD-TO-DNF:绿色实心方形 set style line 4 pt 11 lc rgb '#f39c12' # BDD-FIND-INT-INT:橙色十字 set style line 5 pt 3 lc rgb '#9b59b6' # BDD-LABEL:紫色叉号 # 启用图例,设置位置 set key right top # 核心绘图命令:用第三列的字符串匹配样式 plot '-' using 1:2:($3 eq "BDD-LEFT" ? 1 : \ $3 eq "BDD-HASH" ? 2 : \ $3 eq "%BDD-TO-DNF" ? 3 : \ $3 eq "BDD-FIND-INT-INT" ? 4 : 5) \ with points linestyle variable title '数据点', \ '-' using 1:2:($3 eq "BDD-LEFT" ? 1 : \ $3 eq "BDD-HASH" ? 2 : \ $3 eq "%BDD-TO-DNF" ? 3 : \ $3 eq "BDD-FIND-INT-INT" ? 4 : 5) \ with labels point offset 1,1 notitle # 数据开始,每一行是x y 类别 8.203125e-5 0.14285715 "BDD-LEFT" 8.203125e-5 0.14285715 "BDD-HASH" 8.203125e-5 0.095238104 "%BDD-TO-DNF" 8.203125e-5 0.095238104 "BDD-FIND-INT-INT" 8.203125e-5 0.095238104 "BDD-LABEL" # 第一个数据块结束 e # 第二个数据块(用于标签,如果你不需要标签可以删掉这部分) 8.203125e-5 0.14285715 "BDD-LEFT" 8.203125e-5 0.14285715 "BDD-HASH" 8.203125e-5 0.095238104 "%BDD-TO-DNF" 8.203125e-5 0.095238104 "BDD-FIND-INT-INT" 8.203125e-5 0.095238104 "BDD-LABEL" # 第二个数据块结束 e
关键细节说明:
- 把指令和数据放在同一个文件里的核心是用
'-'作为数据源,每个'-'对应一个数据块,用e结束当前数据块。 - 我用
linestyle variable配合三元表达式,把第三列的字符串类别映射到预先定义好的样式(点形状+颜色),这样每个类别都有独特的视觉标识。 - 如果你不需要给点加标签,可以删掉第二个
plot块,只保留第一个带with points的部分。 - 运行的时候直接在终端输入:
gnuplot your_plot_file.gp,就能生成指定的PNG图了。
要是你有更多类别需要添加,只要在set style line里新增样式,然后在三元表达式里加上对应的判断就行,很灵活。
内容的提问来源于stack exchange,提问作者Jim Newton
相关产品推荐
相关产品推荐

