gnuplot:绘制无白边的图像

3

我希望使用gnuplot绘制图像数据,但不需要任何边框、刻度线等,只需要图像。不幸的是,gnuplot总是会绘制底部的白色线条。以下是一个例子,应该得到完全黑色的3x3像素图像:

set term png size 3,3
set out 'test.png'


set xrange [0:2]
set yrange [0:2]
unset xlabel
unset ylabel
set lmargin 0
set rmargin 0
set tmargin 0
set bmargin 0
set size ratio -1
unset xtics
unset ytics
set border 0
unset key

p '-' w rgbimage
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
0 1 0 0 0
1 1 0 0 0
2 1 0 0 0
0 2 0 0 0
1 2 0 0 0
2 2 0 0 0
e

结果是一张有一个白线和两条黑像素线的图片: enter image description here 这是一个有灰色边框的图像查看器的放大截图: enter image description here 你有什么解决方法吗?
我正在使用 gnuplot 5.0。
感谢您的帮助。

我意识到这并没有对你有太大的帮助,但是考虑到gnuplot是为绘制图表而设计的,我认为尝试将其绘制到一个3x3的图像上是对该软件的误用,不符合它的意图。 - d3dave
我刚试了一下,大小为7x7的图像似乎是不留下残留白线的最小尺寸。考虑增加您的图像大小。 - d3dave
这个3x3的图像是一个示例,旨在尽可能简单地演示效果。图像本身显示了科学数据,通常为400x80像素大小的矢量场。我喜欢gnuplot,因为我还可以添加箭头并将其保存为矢量图形,例如pdf。如果您知道其他可以完成此工作的软件,请告诉我。 - Felix
这里是我想绘制的数据:http://www.filedropper.com/testdata 它的大小为400x80像素,gnuplot在底部绘制了一条白色像素线。最重要的是,这条线会导致顶部像素线的丢失。 - Felix
我建议在Gnuplot信息邮件列表上提出这个问题。 - Thor
1个回答

2

我认为使用一个3px乘以3px的图像并不是适当的情况。当然,代表3x3数据矩阵是完全有效的!

似乎,在一些终端上绘制基于像素的数据存在一些问题。既然你说最终想要一个矢量图像(这无论如何只会影响你在像素数据上绘制的一些箭头),我查看了一些矢量格式,使用了你的示例testdata.dat和脚本testdata.gp。

set autoscale xfix
set autoscale yfix
set margins 0,0,0,0
unset xtics
unset ytics
unset border
unset key

p 'testdata.dat' w rgbimage
  • pdfcairo doesn't work, has some boundary artifacts.
  • postscript works fine, I used

    set terminal postscript eps level3 size 8cm,1.6cm
    set output 'testdata.eps'
    load 'testdata.gp'
    set output
    system('epstopdf testdata.eps')
    
  • tikz works fine as well:

    set terminal tikz standalone externalimages size 8cm,1.6cm
    set output 'testdata.tex'
    load 'testdata.gp'
    set output
    system('pdflatex testdata.tex')
    
  • svg works fine:

    set terminal svg standalone size 800,160
    set output 'testdata.svg'
    load 'testdata.gp'
    

我还不知道cairo终端的实际问题是什么。


感谢您提供这些解决方法。使用SVG时,图像的像素结构会丢失,这对我的数据造成了问题。然而,EPS效果非常好。 - Felix
对于SVG,像素结构不应该丢失,这可能是您的查看器的一个副作用。对于SVG,生成了一个PNG文件,它被链接到(名称为“gp_image...png”)。 - Christoph
好的,你是正确的。当我将分辨率设置高于图像中数据点的数量时,它的行为确实与png终端不同。我每个维度使用了4倍的像素以获得清晰的箭头,而svg终端进行了插值以确定附加像素的值。实际上,如果你知道如何使用它,这是一个非常好的功能。 - Felix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接