如何在Gnuplot中使用外部文件变量设置散点图点大小?
用Gnuplot实现跨文件的可变点大小散点图
不需要预先合并数据文件和点大小文件,Gnuplot支持直接读取两个文件的对应数据来实现需求,以下是两种可行方法:
方法一:直接跨文件引用列(推荐,Gnuplot 5.0+支持)
假设你的数据文件为data.dat,点大小文件为sizes.dat,且两个文件的行数、列数完全对应(即sizes.dat第i行第j列的值,对应data.dat第i行第j列数据点的大小),可以用如下命令:
# 循环绘制每一列,这里假设数据文件有50列(col从1到50) plot for [col=1:50] 'data.dat' using 0:col:'sizes.dat'::col with points ps variable
参数解释:
0:用行号作为x轴坐标col:读取data.dat的第col列作为y轴坐标'sizes.dat'::col:同步读取sizes.dat的第col列,作为当前点的大小变量ps variable:启用可变点大小模式
如果点大小是按行统一设置(比如某一行所有点用同一个大小),只需把引用列改为固定值即可,比如取sizes.dat的第一列:
plot for [col=1:50] 'data.dat' using 0:col:'sizes.dat'::1 with points ps variable
方法二:用数组预存点大小数据(灵活扩展)
如果需要更复杂的逻辑处理点大小,可以先将sizes.dat的数据存入数组,再在绘制时调用。以Gnuplot 5.0+为例:
# 定义数组,长度匹配数据文件的列数 array size_vals[50] # 从sizes.dat读取每一列数据到数组 do for [col=1:50] { # 读取sizes.dat第col列的所有值到临时数组 stats 'sizes.dat' using col name 's' nooutput size_vals[col] = s_array } # 循环绘制,调用数组中的点大小数据 plot for [col=1:50] 'data.dat' using 0:col:(size_vals[col][$0+1]) with points ps variable
注意事项
- 确保两个文件的行数完全一致,否则Gnuplot会在较短文件的末尾停止读取
- 若使用旧版Gnuplot(低于5.0),上述跨文件引用语法不支持,此时只能通过命令行工具合并文件(如
paste data.dat sizes.dat > combined.dat),再用using 0:col:(col+50)调用合并后的点大小列
内容的提问来源于stack exchange,提问作者dbrane
相关产品推荐
相关产品推荐

