导出时 Gnuplot 中的重叠线

Overlapping lines in Gnuplot when exporting

我正在尝试在 gnuplot 中绘制离散的布朗路径,其中涉及很多重叠线。这是它在qt终端中的显示方式(我已经用截图生成了图像):

注意重叠的线条如何染上更深的颜色,这很漂亮。

如果我将其导出为 png,

set term pngcairo size 1366,768 enhanced

我得到这个:

所有的线都具有相同的强度。设置 transparent 也无济于事。

同样的情况发生在这个 MWE 上:

set term pngcairo size 1366,768 background '#000000' enhanced
set output "image.png"
unset key
set border 0
unset xtics
unset ytics

set samples 1e6
set xrange [0:0.1]
p sin(1/x) w l lw 0.3
set output

我每次都是 运行 gnuplot -d,所以我的本地配置没有加载。我应该如何导出绘图以获得与在 GUI 中相同的效果?

以下是我调查的一些结果:

  • 我也无法用pngcairo取得漂亮的效果。当 2 条曲线相互重叠时不添加不透明度。
  • 使用 inkscape -z -e image.png -w 1600 -h 1200 image.svgconvert -density 3000 -resize 1600x1200 image.svg image.png 导出到 SVG 并转换为 PNG 看起来更好一些。此步骤可以作为 system 命令包含在 gnuplot 中。
  • 可以直接从 qt window 将 qt 渲染导出到 png。左侧第一个菜单图标 → 导出为图像
  • 这个过程理论上可以直接从 Gnuplot 自动执行,无需用户交互。已提交补丁:https://sourceforge.net/p/gnuplot/patches/665/。据我所知,它还没有集成到 Gnuplot 5 中。0.x
  • 这里有一个关于Gnuplot-dev的相关讨论。
  • 如果您喜欢冒险,可以尝试使用应用的补丁重新编译 Gnuplot。 submitter 或许能帮到你。

这个问题非常离题,但作为一种解决方法,我制作了一个 Julia 脚本来复制我正在寻找的图像感觉。我将 post 放在这里,以防有人觉得它有用。

using Images

function paint(Ny, Nx, iters=1e6; stepsize = 50)
    randstep() = rand([-1;1])
    x = Nx÷2
    y = Ny÷2
    M = zeros(Nx,Ny)
    for i in 1:iters
        rx = randstep()
        ry = randstep()
        for i in 1:stepsize
            x = mod1(x+rx, Nx)
            y = mod1(y+ry, Ny)
            M[x,y] += 1
        end
    end
    clamped = M/maximum(M)
    img = [Colors.RGB(0,mm,0) for mm in clamped]
end

img = convert(Image,paint(1366,768,1e4,stepsize=10))

save("coolbrownianwalk.png", img)

这会生成如下图像: