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

Gnuplot中如何实现无线段连接的'smooth unique'功能?

实现同一X值对应Y值的平均值散点绘制(替代带连线的smooth unique)

嘿,这个需求其实很容易搞定,不管你用Gnuplot(毕竟你提到了smooth unique)还是Python都能实现,我给你分两种常见工具讲具体操作:

GNUPLOT 实现方法

如果你习惯用Gnuplot,其实只需要在smooth unique的基础上,指定绘制样式为散点即可——smooth unique本身已经帮你完成了同一X值下Y值的平均值计算,我们只需要让它不连线就行:

# 替换成你的数据文件名,pt指定点样式,ps指定点大小
plot 'your_data_file.txt' smooth unique with points pt 7 ps 1.5
  • smooth unique:自动对每个X值对应的所有Y值取平均,生成去重后的均值数据集;
  • with points:强制用散点而非线段绘制结果,pt 7是实心圆样式,ps 1.5可以调整点的大小,你也可以换成其他样式比如pt 5(空心圆)。

如果想先确认均值计算是否正确,可以先用stats命令查看统计结果:

stats 'your_data_file.txt' using 1:2 name 'avg_stats' nooutput
print "X值的数量:", avg_stats_records
print "部分X的均值:", avg_stats_sum_y / avg_stats_count_y

不过这步是可选的,直接用上面的plot命令就能出图。

Python + Matplotlib 实现方法

如果用Python处理数据更顺手,步骤会更直观:先分组求均值,再绘制散点:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据(假设是空格分隔的两列数据,无表头)
data = pd.read_csv('your_data_file.txt', sep='\s+', header=None, names=['x', 'y'])
# 按X分组,计算每组Y的平均值
avg_data = data.groupby('x')['y'].mean().reset_index()

# 绘制散点图
plt.scatter(avg_data['x'], avg_data['y'], marker='o', s=60, color='darkblue')
plt.xlabel('X Value')
plt.ylabel('Average Y Value')
plt.title('Average Y per X (No Lines)')
plt.show()

这里用pandas的groupby做分组聚合,能清晰看到处理后的均值数据,再用plt.scatter()纯散点绘制,完全不会出现连线。

核心思路其实都是一样的:先对同一X值的Y值做聚合求平均,再以散点形式绘制处理后的结果,这样就完美实现了你要的「和smooth unique功能相同,但只显示点不连线」的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:14