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

如何在gnuplot中根据重复次数加粗/放大重叠数据点?

在Gnuplot中根据重复次数调整数据点大小的实现方法

当然可以实现!核心思路是先统计每个数据点的重复次数,再把次数作为参数来控制点的大小(ps)——毕竟“加粗”在gnuplot里大多通过调整点尺寸来实现,视觉效果是一致的。下面分步骤给你讲具体怎么做:

第一步:预处理数据,统计重复次数

Gnuplot本身没法直接统计重复点,所以我们先把数据整理成每行一个(x,y)点的格式,再用命令行工具统计次数。

处理你的示例数据

你的原始数据是一行多个值:

1 1 1 1 1 1 2 0.0 2 0.0 2 0.314285714286 2 0.967213114754 2 0.936507936508

先把它转换成每行一个点(Linux/macOS环境下):

# 假设原始数据存为original.txt
tr ' ' '\n' < original.txt | paste - - > formatted.txt

执行后formatted.txt会变成:

1 1
1 1
1 1
1 1
1 1
1 1
2 0.0
2 0.0
2 0.314285714286
2 0.967213114754
2 0.936507936508

统计每个点的重复次数

接着用sort+uniq+awk统计次数,生成带计数的新文件:

sort formatted.txt | uniq -c | awk '{print $2, $3, $1}' > counted.txt

得到的counted.txt里第三列就是重复次数:

1 1 6
2 0.0 2
2 0.314285714286 1
2 0.967213114754 1
2 0.936507936508 1

第二步:在Gnuplot中用计数控制点大小

现在就可以用第三列的数值来设置点的大小了,比如:

# 加个缩放因子,避免重复次数太多导致点过大
plot "counted.txt" title "file 1" pt 7 ps ($3 * 0.25), \
     "counted_file2.txt" title "file 2" pt 5 ps ($3 * 0.25) lc rgb "red"
  • pt 7是实心圆,pt 5是空心圆,用来区分不同文件的点
  • ($3 * 0.25)表示用第三列的计数乘以0.25作为点大小,你可以根据实际效果调整这个系数

如果不想用命令行预处理,也可以在Gnuplot里用数组和循环统计,但数据量大的时候会比较慢,所以更推荐先用命令行处理好数据。

额外提示

  • 如果你的数据本来就是每行一个点,跳过第一步的格式转换直接统计就行
  • 要是想让点的“加粗”效果更明显,可以搭配不同的点类型(比如pt 0空心圆+lw线宽,不过实心圆的大小调整视觉效果更直接)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:56:22