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

Gnuplot:能否用更简便方法替代点类型显示图片?

关于Gnuplot用图片替代数据点的简化实现方法

我已经看过一篇介绍Gnuplot用图片替代点类型的文章,文中方法是通过包含图片名称的向量、数值数组配合For命令迭代来实现。想请教:有没有更简便的实现方式?还是说文中的方法是当前Gnuplot实现该需求的唯一途径?

以下是我尝试用图片替代点类型的失败代码示例:

$DATA<<EOD
1,"c:\temp\image1.png",0.00,0.00
2,"c:\temp\image1.png",424.75,549.75
3,"c:\temp\image1.png",849.50,1099.50
4,"c:\temp\image2.png",1274.25,1649.25
5,"c:\temp\image2.png",1698.00,2198.00
EOD
set terminal windows enhanced size 1700,2200
set datafile separator comma
set style data point
unset xtics
unset ytics
set border 0
set key off
set xrange [0:1699]
set yrange [0:2199]
plot $DATA with image '$2' binary filetype=png center=($3,$4) rgbimage

首先说结论:你尝试的plot $DATA with image写法行不通,因为with image模式本质是用来绘制单张完整位图(比如热图、背景图),没法直接从数据列读取多个图片路径并定位绘制。

目前Gnuplot确实没有原生支持「从数据文件批量读取图片路径+指定坐标绘制」的单命令方案,但你看到的数组+循环方法可以简化,不用手动定义向量和数组:

简化后的可行代码

$DATA<<EOD
1,"c:\temp\image1.png",0.00,0.00
2,"c:\temp\image1.png",424.75,549.75
3,"c:\temp\image1.png",849.50,1099.50
4,"c:\temp\image2.png",1274.25,1649.25
5,"c:\temp\image2.png",1698.00,2198.00
EOD

set terminal windows enhanced size 1700,2200
set datafile separator comma
unset xtics
unset ytics
set border 0
set key off
set xrange [0:1699]
set yrange [0:2199]

# 自动提取数据中唯一的图片路径(Windows环境若无awk,可手动替换为图片列表)
unique_images = system("awk -F',' '{print $2}' $DATA | sort | uniq")

# 循环绘制每个图片对应的坐标点
do for [img in unique_images] {
    plot $DATA using 3:4 \
         filename=img \
         with image binary filetype=png center=(column(3),column(4)) \
         notitle
}

关键优化点

  • 用system调用awk自动提取并去重数据里的图片路径,不用手动维护数组
  • 循环遍历每个图片,一次性绘制该图片对应的所有坐标点,减少重复代码

注意事项

  • 如果是Windows环境且没有awk工具,可以手动列出图片路径,比如unique_images = '"c:\temp\image1.png" "c:\temp\image2.png"'
  • 可以通过size=(width, height)参数调整图片显示大小,比如size=(50,50)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:01:31