在 GNUplot 中着色和显示来自 2 个文件的多边形边缘

Coloring and showing edges of polygons from 2 files in GNUplot

我通常使用 Python 编写代码并且不知道任何 GNUplot,但我必须使用少量 C 来绘制表示为多边形的人体细胞。我每次都有一个包含多边形顶点所有坐标的文件(这是一个动态模拟),代码的作用(我不知道如何)是它链接每个单元格顶点以形成单元格边等我们可以看到不同的细胞。这是用于绘制我的多边形的代码,我得到的代码。

start = 0000
stop = 49990

set terminal pngcairo rounded size 800,800
set style line 1 lt 3 lc rgb pt 7 lw 2


set xrange [0:d*sqrt(N)]
set yrange [0:h*sqrt(N)]

point_files(n) = sprintf('./PointFiles/points%06d.txt', n)
cell_files(n) = sprintf('./CellpopFiles/cells%06d.txt', n)

do for [i = start:stop:10] {
    outfile = sprintf('./Figures/figures%06d.png',i)
    set output outfile
    unset key
    plot  cell_files(i) w filledcurves ls 1
}

到目前为止,代码有效,但我想将我的细胞群分成 2 个,并用 2 种不同的颜色给两个细胞群上色,这是我没有做到的。我的单元格中只有一个是彩色的,即使这样单元格边缘也没有显示——我有白色(而不是绿色)和红色表面在四处移动,但我看不到每个单元格之间的界限,没有边缘。

start = 0000
stop = 49990

set terminal pngcairo rounded size 800,800
set style line 1 lt 3 lc rgb 'red' pt 7 lw 2
set style line 2 lt 3 lc rgb 'green' pt 7 lw 2

set xrange [0:d*sqrt(N)]
set yrange [0:h*sqrt(N)]

point_files(n) = sprintf('./PointFiles/points%06d.txt', n)
cell_files0(n) = sprintf('./Cellpop0Files/cells%06d.txt', n)
cell_files1(n) = sprintf('./Cellpop1Files/cells%06d.txt', n)

do for [i = start:stop:10] {
    outfile = sprintf('./Figures/figures%06d.png',i)    
    set output outfile
    unset key
    plot  cell_files0(i) w filledcurves ls 1
    plot  cell_files1(i) w filledcurves ls 2
}

使用 'w filledcurves closed ls 1' 不会改变任何东西。

解决方案可能非常简单,但在不知道任何 C 的情况下我一直在努力,在此先感谢您!

将多个文件绘制到同一个图中可以通过用逗号分隔绘图元素来完成。检查 help plot.

Syntax:

  plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>}

为了增加脚本和冗长绘图命令的可读性,您可以引入“换行符”,\ 是行中的最后一个字符(为此找不到帮助关键字) ,但我知道它隐藏在帮助中的某个地方)。

你试过了吗:

plot  cell_files0(i) w filledcurves ls 1,  \
      cell_files1(i) w filledcurves ls 2

感谢您的帮助,如果有人遇到和我一样的问题,下面是代码:

N = 100
d = sqrt(2/sqrt(3))
h = sqrt(3)*d/2

start = 0000
stop = 1990

set terminal pngcairo rounded size 800,800

set xrange [0:d*sqrt(N)]
set yrange [0:h*sqrt(N)]

point_files(n) = sprintf('./PointFiles/points%06d.txt', n)
cell_files0(n) = sprintf('./Cellpop0Files/cells%06d.txt', n)
cell_files1(n) = sprintf('./Cellpop1Files/cells%06d.txt', n)

do for [i = start:stop:10] {
    outfile = sprintf('./Figures/figures%06d.png',i)
    set output outfile
    set border
    unset key
    plot cell_files0(i) with filledcurves fc "royalblue" fs solid 0.5 border lc    "black", \
     cell_files1(i) with filledcurves fc "yellow" fs solid 0.5 border lc "black"
}