gnuplot:如何绘制带有孔的填充区域?

gnuplot:如何绘制带有孔的填充区域?,gnuplot,Gnuplot,有没有办法画一个有洞的填充区域? 一个实际的例子是用透明的背景画出南非的边界。下面是一个简单的复制粘贴示例。 单独打印索引0和索引1或以背景色打印没有帮助。有什么想法吗 代码: ### filled area with hole reset session # set term wxt size 600,400 set term pngcairo size 600,400 transparent set output "FilledWithHole.png" $Data <<EOD

有没有办法画一个有洞的填充区域? 一个实际的例子是用透明的背景画出南非的边界。下面是一个简单的复制粘贴示例。 单独打印
索引0
索引1
或以背景色打印没有帮助。有什么想法吗

代码:

### filled area with hole
reset session
# set term wxt size 600,400
set term pngcairo size 600,400 transparent
set output "FilledWithHole.png"
$Data <<EOD
2 2
8 2
8 8
2 8
2 2


4 4
4 6
6 6
6 4
4 4
EOD

unset key
set xrange [0:10]
set yrange [0:10]
set linetype 1 lc rgb "green" lw 4
set multiplot layout 2,2
    plot x lt 1, $Data w lp lw 2 pt 7 lc rgb "red"
    plot x lt 1, $Data w filledcurve lw 2 lc rgb "red"
    plot x lt 1, $Data index 0 w filledcurve fc rgb "red", \
     '' index 1 w filledcurve fc rgb "blue"
    plot x lt 1, $Data index 0 w filledcurve fc rgb "red", \
     '' index 1 w filledcurve fc bgnd
unset multiplot
set output
### end of code
####用孔填充的区域
重置会话
#设置术语wxt尺寸600400
设置术语pngcairo尺寸600400透明
设置输出“FilledWithHole.png”

$Data
$HOLE南非边界,75%透明填充(世界其他地区称为lagniappe)


这是一个用透明孔绘制填充区域的解决方案。“简单”的想法是将多条闭合路径转换为一条闭合路径,并用
填充曲线绘制它。对于较大的数据来说,这有点冗长和缓慢,但到目前为止,我还没有找到更好的方法。我既不是数学家也不是拓扑学家,因此,如果代码中可能有更聪明、更有效的解决方案或错误,请告诉我。在Win7/64下使用gnuplot 5.2.6测试代码

下面用一个简单的示例说明了代码的基本功能:

左侧(输入):多条曲线。点用(曲线/点)标记,例如
(4/7)

右侧(输出):一条曲线,这样该曲线可以绘制为填充曲线,而孔保持打开状态。点按新的顺序标记

假设/限制:

### filled area with hole
reset session
# set term wxt size 600,400
set term pngcairo size 600,400 transparent
set output "FilledWithHole.png"
$Data <<EOD
2 2
8 2
8 8
2 8
2 2


4 4
4 6
6 6
6 4
4 4
EOD

unset key
set xrange [0:10]
set yrange [0:10]
set linetype 1 lc rgb "green" lw 4
set multiplot layout 2,2
    plot x lt 1, $Data w lp lw 2 pt 7 lc rgb "red"
    plot x lt 1, $Data w filledcurve lw 2 lc rgb "red"
    plot x lt 1, $Data index 0 w filledcurve fc rgb "red", \
     '' index 1 w filledcurve fc rgb "blue"
    plot x lt 1, $Data index 0 w filledcurve fc rgb "red", \
     '' index 1 w filledcurve fc bgnd
unset multiplot
set output
### end of code
  • 仅输入闭合的非相交(子)曲线(第一个数据点=最后一个数据点)
  • 单个曲线在数据文件中由两条空行分隔
  • 不(尚未)处理“多个同心”曲线
程序

  • 确定所有曲线的方向,顺时针(CW)或逆时针(CCW)
  • 确定哪条曲线是外部曲线(例如y值最大的曲线)
  • 改变方向,使外曲线为逆时针方向,所有内曲线为顺时针方向
  • 确定从外曲线点到内曲线点的最短连接。将此连接写入连接列表,此内部曲线现在已“连接”
  • 确定从剩余“未连接”曲线到“已连接”曲线的最短连接。将此连接写入连接列表
  • 从5开始重复。直到所有曲线都“连接”
  • 浏览连接列表,在连接点拆分第一条曲线,然后插入第二条曲线
  • 从7点开始重复。直到插入所有曲线 结果是可以填充的单个路径,并显示所需的孔

    代码:

    ### filled area with hole
    reset session
    # set term wxt size 600,400
    set term pngcairo size 600,400 transparent
    set output "FilledWithHole.png"
    $Data <<EOD
    2 2
    8 2
    8 8
    2 8
    2 2
    
    
    4 4
    4 6
    6 6
    6 4
    4 4
    EOD
    
    unset key
    set xrange [0:10]
    set yrange [0:10]
    set linetype 1 lc rgb "green" lw 4
    set multiplot layout 2,2
        plot x lt 1, $Data w lp lw 2 pt 7 lc rgb "red"
        plot x lt 1, $Data w filledcurve lw 2 lc rgb "red"
        plot x lt 1, $Data index 0 w filledcurve fc rgb "red", \
         '' index 1 w filledcurve fc rgb "blue"
        plot x lt 1, $Data index 0 w filledcurve fc rgb "red", \
         '' index 1 w filledcurve fc bgnd
    unset multiplot
    set output
    ### end of code
    
    主程序
    tbSwissCheese.dem
    ):

    tbAdjustOrientation.gpp

    ### get outer curve and orientation of all curves
    # ARG1 = original curves
    # ARG2 = array of orientations
    # ARG3 = index of outer curve
    
    # get outer curve via maximum y-coordinate 
    # and get orientation of each curve 
    # orientation of the curves: -1=clockwise, +1=counterclockwise
    Orientation(xa,ya,xb,yb,xc,yc) = sgn((xb-xa)*(yc-ya) - (xc-xa)*(yb-ya))
    
    set table $Dummy
        do for [i=0:BlockCount-1] {
            xa=xb=xc=ya=yb=yc=NaN
            OSum = 0
            plot @ARG1 index i u \
                (p0maxY=($0==0? ($2): $2>=p0maxY ? $2 : p0maxY)): \
                (OuterMaxY=(i==0? (OuterIndex=i, p0maxY) : p0maxY>OuterMaxY ? (OuterIndex=i, p0maxY) : OuterMaxY)): \
                (xa=xb,xb=xc,xc=$1,ya=yb,yb=yc,yc=$2, \
                OSum=OSum+Orientation(xa,ya,xb,yb,xc,yc)) \
                with table
            @ARG2[i+1] = sgn(OSum)
        }
    unset table
    @ARG3 = OuterIndex
    ### end of code
    
    ### adjust orientations of curves
    # outer curve-->CCW, inner curves-->CW
    # ARG1 = original curves
    # ARG2 = array of orientations of curves (+1=CCW, -1=CW)
    # ARG3 = IndexOuter
    
    set print $OrientedCurves
        do for [i=1:|@ARG2|] {   # loop curves
            set table $Tmp
                plot @ARG1 index i-1 u 1:2:(column(-2)):0 w table
            unset table
            set table $TmpRev
                plot @ARG1 index i-1 u 1:2:(column(-2)):(|$Tmp|-1-$0) w table
            unset table
            Orientation = @ARG2[i]
            if ((i-1==@ARG3 && Orientation ==-1) || (i-1!=@ARG3 && Orientation==1)) {
                @ARG2[i] = -Orientation
                do for [i=|$Tmp|:1:-1] { print $TmpRev[i]}  # reverse curve
            }
            else { print $Tmp }
            print "\n"           # add empty line
            print "\n"           # add empty line
        }
    set print
    undef $Tmp
    ### end of code
    
    ### find minimum distance between curves
    # ARG1 = Curves with corrected orientation
    # ARG2 = Connection status
    
    # function for distance of two points
    Dist(x0,y0,x1,y1) = sqrt((x1-x0)**2 + (y1-y0)**2)
    
    # Define macros for later
    FindMinDist = "C1minB=C1B, C1minN=C1N, C1minX=C1X, C1minY=C1Y, \
                   C2minB=$3,  C2minN=$0,  C2minX=$1,  C2minY=$2, Dist(C1X,C1Y,$1,$2)"
    FindAbsMinDist = "AbsC1minB=C1minB, AbsC1minN=C1minN,\
                      AbsC2minB=C2minB, AbsC2minN=C2minN, MinDist"
    
    # put connected curves into one datablock
    set table $Connected
        do for [i=1:|@ARG2|] {
            if (@ARG2[i]==1) {
                plot @ARG1 index i-1 u 1:2:3:4 every ::1 w table
            }
        }
    unset table
    
    set table $Dummy
        do for [i=1:|@ARG2|] {
            if (@ARG2[i]==0) {
                do for [j=1:|$Connected|] {
                    C1X = real(word($Connected[j],1))    # x-coordinate
                    C1Y = real(word($Connected[j],2))    # y-coordinate
                    C1B =  int(word($Connected[j],3))    # block number
                    C1N =  int(word($Connected[j],4))    # point number
                    plot @ARG1 index i-1 u \
                        (MinDist=(j==1?(@FindMinDist):(Dist(C1X,C1Y,$1,$2)<=MinDist) ? \
                        (@FindMinDist) : MinDist)) with table
                    AbsMinDist = (j==1?(@FindAbsMinDist): MinDist<=AbsMinDist?(@FindAbsMinDist): AbsMinDist)
                }
            }
        }
    unset table
    @ARG2[AbsC2minB+1] = 1
    
    set print $Connections append
        print sprintf("%d %d %d %d %g %g %g %g", \
            int(AbsC1minB), int(AbsC1minN), int(AbsC2minB), int(AbsC2minN), \
            C1minX,C1minY, C2minX,C2minY)
    set print
    ### end of code
    
    ### combine curves to one curve
    # outer curve-->CCW, inner curves-->CW
    # ARG1 = $OrientedCurves
    # ARG2 = $Connections
    # ARG3 = IndexOuter
    # ARG4 = Combined curves
    
    set table @ARG4
        plot @ARG1 index IndexOuter u 1:2:3:4 w table
    unset table
    
    do for [k=1:|@ARG2|] {
        Flag = 1
        Block1=int(word(@ARG2[k],1))
        Point1=int(word(@ARG2[k],2))
        Block2=int(word(@ARG2[k],3))
        Point2=int(word(@ARG2[k],4))
        set table $Tmp1
            plot @ARG4 u 1:2:3:4 w table
        set table $Tmp2 
            plot @ARG1 index Block2 u 1:2:3:4 w table
        unset table
        set print @ARG4
            do for [i=1:|$Tmp1|] {
                print $Tmp1[i]
                if (int(word($Tmp1[i],3))==Block1 && int(word($Tmp1[i],4))==Point1 && Flag) {
                    do for [j=0:|$Tmp2|-1] {
                        p=(j+Point2)%(|$Tmp2|-1)
                        print $Tmp2[p+1]
                    }
                    print $Tmp1[i]
                    Flag=0
                }
            }
            print "\n"
            print "\n"
        set print
    }
    undefine $Tmp*
    ### end of code
    
    tbFindMinDistCurve.gpp

    ### get outer curve and orientation of all curves
    # ARG1 = original curves
    # ARG2 = array of orientations
    # ARG3 = index of outer curve
    
    # get outer curve via maximum y-coordinate 
    # and get orientation of each curve 
    # orientation of the curves: -1=clockwise, +1=counterclockwise
    Orientation(xa,ya,xb,yb,xc,yc) = sgn((xb-xa)*(yc-ya) - (xc-xa)*(yb-ya))
    
    set table $Dummy
        do for [i=0:BlockCount-1] {
            xa=xb=xc=ya=yb=yc=NaN
            OSum = 0
            plot @ARG1 index i u \
                (p0maxY=($0==0? ($2): $2>=p0maxY ? $2 : p0maxY)): \
                (OuterMaxY=(i==0? (OuterIndex=i, p0maxY) : p0maxY>OuterMaxY ? (OuterIndex=i, p0maxY) : OuterMaxY)): \
                (xa=xb,xb=xc,xc=$1,ya=yb,yb=yc,yc=$2, \
                OSum=OSum+Orientation(xa,ya,xb,yb,xc,yc)) \
                with table
            @ARG2[i+1] = sgn(OSum)
        }
    unset table
    @ARG3 = OuterIndex
    ### end of code
    
    ### adjust orientations of curves
    # outer curve-->CCW, inner curves-->CW
    # ARG1 = original curves
    # ARG2 = array of orientations of curves (+1=CCW, -1=CW)
    # ARG3 = IndexOuter
    
    set print $OrientedCurves
        do for [i=1:|@ARG2|] {   # loop curves
            set table $Tmp
                plot @ARG1 index i-1 u 1:2:(column(-2)):0 w table
            unset table
            set table $TmpRev
                plot @ARG1 index i-1 u 1:2:(column(-2)):(|$Tmp|-1-$0) w table
            unset table
            Orientation = @ARG2[i]
            if ((i-1==@ARG3 && Orientation ==-1) || (i-1!=@ARG3 && Orientation==1)) {
                @ARG2[i] = -Orientation
                do for [i=|$Tmp|:1:-1] { print $TmpRev[i]}  # reverse curve
            }
            else { print $Tmp }
            print "\n"           # add empty line
            print "\n"           # add empty line
        }
    set print
    undef $Tmp
    ### end of code
    
    ### find minimum distance between curves
    # ARG1 = Curves with corrected orientation
    # ARG2 = Connection status
    
    # function for distance of two points
    Dist(x0,y0,x1,y1) = sqrt((x1-x0)**2 + (y1-y0)**2)
    
    # Define macros for later
    FindMinDist = "C1minB=C1B, C1minN=C1N, C1minX=C1X, C1minY=C1Y, \
                   C2minB=$3,  C2minN=$0,  C2minX=$1,  C2minY=$2, Dist(C1X,C1Y,$1,$2)"
    FindAbsMinDist = "AbsC1minB=C1minB, AbsC1minN=C1minN,\
                      AbsC2minB=C2minB, AbsC2minN=C2minN, MinDist"
    
    # put connected curves into one datablock
    set table $Connected
        do for [i=1:|@ARG2|] {
            if (@ARG2[i]==1) {
                plot @ARG1 index i-1 u 1:2:3:4 every ::1 w table
            }
        }
    unset table
    
    set table $Dummy
        do for [i=1:|@ARG2|] {
            if (@ARG2[i]==0) {
                do for [j=1:|$Connected|] {
                    C1X = real(word($Connected[j],1))    # x-coordinate
                    C1Y = real(word($Connected[j],2))    # y-coordinate
                    C1B =  int(word($Connected[j],3))    # block number
                    C1N =  int(word($Connected[j],4))    # point number
                    plot @ARG1 index i-1 u \
                        (MinDist=(j==1?(@FindMinDist):(Dist(C1X,C1Y,$1,$2)<=MinDist) ? \
                        (@FindMinDist) : MinDist)) with table
                    AbsMinDist = (j==1?(@FindAbsMinDist): MinDist<=AbsMinDist?(@FindAbsMinDist): AbsMinDist)
                }
            }
        }
    unset table
    @ARG2[AbsC2minB+1] = 1
    
    set print $Connections append
        print sprintf("%d %d %d %d %g %g %g %g", \
            int(AbsC1minB), int(AbsC1minN), int(AbsC2minB), int(AbsC2minN), \
            C1minX,C1minY, C2minX,C2minY)
    set print
    ### end of code
    
    ### combine curves to one curve
    # outer curve-->CCW, inner curves-->CW
    # ARG1 = $OrientedCurves
    # ARG2 = $Connections
    # ARG3 = IndexOuter
    # ARG4 = Combined curves
    
    set table @ARG4
        plot @ARG1 index IndexOuter u 1:2:3:4 w table
    unset table
    
    do for [k=1:|@ARG2|] {
        Flag = 1
        Block1=int(word(@ARG2[k],1))
        Point1=int(word(@ARG2[k],2))
        Block2=int(word(@ARG2[k],3))
        Point2=int(word(@ARG2[k],4))
        set table $Tmp1
            plot @ARG4 u 1:2:3:4 w table
        set table $Tmp2 
            plot @ARG1 index Block2 u 1:2:3:4 w table
        unset table
        set print @ARG4
            do for [i=1:|$Tmp1|] {
                print $Tmp1[i]
                if (int(word($Tmp1[i],3))==Block1 && int(word($Tmp1[i],4))==Point1 && Flag) {
                    do for [j=0:|$Tmp2|-1] {
                        p=(j+Point2)%(|$Tmp2|-1)
                        print $Tmp2[p+1]
                    }
                    print $Tmp1[i]
                    Flag=0
                }
            }
            print "\n"
            print "\n"
        set print
    }
    undefine $Tmp*
    ### end of code
    
    测试数据文件:
    SwissCheese.dat

    # Switzerland with holes
    8.850   47.200
    8.843   47.234
    8.821   47.265
    8.788   47.289
    8.746   47.305
    8.700   47.310
    8.654   47.305
    8.612   47.289
    8.579   47.265
    8.557   47.234
    8.550   47.200
    8.557   47.166
    8.579   47.135
    8.612   47.111
    8.654   47.095
    8.700   47.090
    8.746   47.095
    8.788   47.111
    8.821   47.135
    8.843   47.166
    8.850   47.200
    
    
    7.550   46.800
    7.543   46.834
    7.521   46.865
    7.488   46.889
    7.446   46.905
    7.400   46.910
    7.354   46.905
    7.312   46.889
    7.279   46.865
    7.257   46.834
    7.250   46.800
    7.257   46.766
    7.279   46.735
    7.312   46.711
    7.354   46.695
    7.400   46.690
    7.446   46.695
    7.488   46.711
    7.521   46.735
    7.543   46.766
    7.550   46.800
    
    
    9.150   46.700
    9.143   46.737
    9.121   46.771
    9.088   46.797
    9.046   46.814
    9.000   46.820
    8.954   46.814
    8.912   46.797
    8.879   46.771
    8.857   46.737
    8.850   46.700
    8.857   46.663
    8.879   46.629
    8.912   46.603
    8.954   46.586
    9.000   46.580
    9.046   46.586
    9.088   46.603
    9.121   46.629
    9.143   46.663
    9.150   46.700
    
    
    9.700   46.800
    9.690   46.846
    9.662   46.888
    9.618   46.921
    9.562   46.943
    9.500   46.950
    9.438   46.943
    9.382   46.921
    9.338   46.888
    9.310   46.846
    9.300   46.800
    9.310   46.754
    9.338   46.712
    9.382   46.679
    9.438   46.657
    9.500   46.650
    9.562   46.657
    9.618   46.679
    9.662   46.712
    9.690   46.754
    9.700   46.800
    
    
    7.600   46.300
    7.590   46.346
    7.562   46.388
    7.518   46.421
    7.462   46.443
    7.400   46.450
    7.338   46.443
    7.282   46.421
    7.238   46.388
    7.210   46.346
    7.200   46.300
    7.210   46.254
    7.238   46.212
    7.282   46.179
    7.338   46.157
    7.400   46.150
    7.462   46.157
    7.518   46.179
    7.562   46.212
    7.590   46.254
    7.600   46.300
    
    
    8.300   47.000
    8.285   47.068
    8.243   47.129
    8.176   47.178
    8.093   47.209
    8.000   47.220
    7.907   47.209
    7.824   47.178
    7.757   47.129
    7.715   47.068
    7.700   47.000
    7.715   46.932
    7.757   46.871
    7.824   46.822
    7.907   46.791
    8.000   46.780
    8.093   46.791
    8.176   46.822
    8.243   46.871
    8.285   46.932
    8.300   47.000
    
    
    8.75652 47.692
    8.79566 47.6794
    8.77868 47.7081
    8.80838 47.7342
    8.87728 47.7049
    8.85577 47.6931
    8.90052 47.6569
    8.97066 47.67
    9.07024 47.6836
    9.16198 47.6716
    9.23075 47.6578
    9.35642 47.6284
    9.49647 47.5645
    9.54375 47.5393
    9.57583 47.4924
    9.60636 47.4695
    9.64052 47.4616
    9.65088 47.4368
    9.65767 47.3999
    9.66886 47.3815
    9.62469 47.375
    9.59403 47.3339
    9.57281 47.3112
    9.53591 47.2735
    9.49258 47.1793
    9.52463 47.1066
    9.48709 47.0744
    9.48043 47.0586
    9.5357  47.0671
    9.60366 47.0615
    9.66729 47.061
    9.74091 47.0456
    9.79775 47.0311
    9.86504 47.0261
    9.8897  46.9992
    9.87519 46.946
    9.89922 46.9302
    9.94194 46.9137
    9.98239 46.9091
    10.0223 46.8978
    10.08   46.8638
    10.1548 46.8527
    10.2323 46.8787
    10.2372 46.9089
    10.2555 46.9322
    10.3105 46.9318
    10.3311 46.9626
    10.388  47.0021
    10.4236 46.9661
    10.4627 46.9551
    10.4884 46.9192
    10.4674 46.8722
    10.4582 46.8312
    10.4297 46.7959
    10.4438 46.7591
    10.4174 46.716
    10.3885 46.6619
    10.4273 46.6413
    10.486  46.613
    10.484  46.5853
    10.4642 46.5486
    10.4188 46.5518
    10.383  46.55
    10.326  46.5503
    10.2866 46.5704
    10.254  46.5755
    10.2503 46.6042
    10.2335 46.6352
    10.1856 46.6232
    10.1086 46.6054
    10.0936 46.5763
    10.0509 46.5368
    10.041  46.4854
    10.0616 46.428
    10.1313 46.4325
    10.1606 46.4005
    10.1173 46.3626
    10.1211 46.3162
    10.1478 46.2416
    10.1018 46.2335
    10.0621 46.2265
    10.0508 46.2666
    10  46.2902
    9.98641 46.3342
    9.96431 46.3658
    9.91552 46.3768
    9.85695 46.3659
    9.777   46.3387
    9.72824 46.3477
    9.72411 46.3148
    9.63031 46.2921
    9.5723  46.3024
    9.51322 46.3494
    9.46786 46.3758
    9.45087 46.4252
    9.46635 46.4952
    9.427   46.4935
    9.37299 46.4842
    9.34341 46.509
    9.27718 46.4883
    9.24953 46.4437
    9.26993 46.4168
    9.29092 46.3506
    9.25114 46.2749
    9.22734 46.237
    9.19496 46.2003
    9.15606 46.1725
    9.10494 46.1377
    9.07538 46.118
    9.06763 46.0682
    9.01162 46.0455
    9.02197 46.0052
    9.00059 45.9709
    9.02967 45.9293
    9.06734 45.9213
    9.08394 45.9062
    9.04751 45.8626
    9.01644 45.8259
    8.9916  45.8424
    8.94941 45.8501
    8.91422 45.854
    8.93746 45.8801
    8.8997  45.9327
    8.88224 45.9668
    8.81466 46.0004
    8.79715 46.0193
    8.83691 46.0434
    8.85627 46.0687
    8.83295 46.093
    8.76167 46.1082
    8.73967 46.1138
    8.68504 46.1143
    8.63116 46.1279
    8.59412 46.1534
    8.56392 46.1889
    8.51833 46.2278
    8.45157 46.2595
    8.4349  46.3051
    8.46016 46.3507
    8.45917 46.386
    8.46436 46.4376
    8.42073 46.4643
    8.35604 46.4468
    8.30272 46.4277
    8.30286 46.4048
    8.29548 46.3737
    8.21874 46.3232
    8.14417 46.3094
    8.09535 46.2744
    8.1331  46.2373
    8.16343 46.1868
    8.12882 46.1431
    8.07063 46.1169
    8.02392 46.0742
    8.00836 46.0278
    7.90553 46.0042
    7.87016 45.9678
    7.85925 45.9345
    7.80055 45.9285
    7.74491 45.9487
    7.7127  45.9384
    7.68223 45.965
    7.64943 45.9863
    7.57812 45.9869
    7.53851 45.985
    7.522   45.9708
    7.47326 45.9626
    7.44166 45.9385
    7.38828 45.9167
    7.33869 45.9225
    7.28521 45.9226
    7.22129 45.8976
    7.20412 45.8753
    7.1564  45.8874
    7.10306 45.867
    7.08425 45.8921
    7.0434  45.9363
    7.03921 45.9627
    7.00379 45.9759
    6.97844 46.0311
    6.93391 46.069
    6.88532 46.0588
    6.88842 46.0969
    6.89158 46.1298
    6.80094 46.1393
    6.78322 46.1731
    6.80249 46.2232
    6.84428 46.2687
    6.81911 46.3178
    6.78855 46.3329
    6.76052 46.3621
    6.79236 46.388
    6.80835 46.4248
    6.71691 46.4512
    6.62648 46.4595
    6.48707 46.4544
    6.39078 46.4172
    6.30078 46.3969
    6.20829 46.318
    6.23374 46.291
    6.25861 46.2591
    6.29396 46.2628
    6.27403 46.2292
    6.1728  46.1749
    6.06898 46.1593
    6.02194 46.1469
    5.97861 46.1815
    5.95746 46.2038
    5.99444 46.2329
    6.07484 46.2496
    6.10812 46.2654
    6.11198 46.3041
    6.15166 46.3607
    6.10234 46.4022
    6.07657 46.4426
    6.11547 46.5162
    6.10404 46.5741
    6.16471 46.6209
    6.26512 46.69
    6.33275 46.7205
    6.36921 46.7382
    6.44888 46.7855
    6.42341 46.8152
    6.45161 46.8532
    6.43369 46.9161
    6.47911 46.9728
    6.51035 46.9793
    6.58668 46.9989
    6.64764 47.0314
    6.67663 47.0542
    6.69297 47.0726
    6.73902 47.0958
    6.74026 47.1146
    6.77347 47.1267
    6.81503 47.1437
    6.85443 47.1721
    6.84365 47.182
    6.87413 47.1956
    6.91109 47.2261
    6.93734 47.243
    6.94568 47.2575
    6.94118 47.2917
    6.96175 47.2948
    6.99482 47.3017
    7.02934 47.3307
    7.05429 47.3451
    7.02543 47.3754
    6.93628 47.3655
    6.87227 47.3662
    6.91176 47.4006
    6.93462 47.4235
    6.9951  47.4576
    6.98506 47.5021
    7.04216 47.5011
    7.14222 47.503
    7.18955 47.4922
    7.17478 47.4483
    7.22997 47.44
    7.27313 47.4347
    7.36734 47.4367
    7.43686 47.4707
    7.44782 47.4787
    7.43112 47.5014
    7.4788  47.484
    7.50957 47.514
    7.52749 47.5602
    7.5522  47.5857
    7.58312 47.5823
    7.62708 47.5929
    7.65024 47.6061
    7.659   47.5956
    7.66017 47.5769
    7.64654 47.568
    7.65907 47.5453
    7.70219 47.5432
    7.76452 47.5546
    7.79921 47.5636
    7.82706 47.5892
    7.88092 47.591
    7.91064 47.5781
    7.93957 47.5489
    7.95685 47.5593
    8.01242 47.5538
    8.05216 47.5605
    8.08776 47.563
    8.11247 47.5866
    8.13889 47.5923
    8.17595 47.6037
    8.2028  47.6231
    8.2277  47.6163
    8.24005 47.6165
    8.26922 47.6146
    8.30056 47.6082
    8.32723 47.5798
    8.35691 47.5725
    8.40435 47.5815
    8.43089 47.5737
    8.45715 47.5768
    8.48958 47.5896
    8.46754 47.6055
    8.53098 47.6357
    8.56918 47.6209
    8.59575 47.6001
    8.60178 47.6302
    8.61061 47.6553
    8.62305 47.6455
    8.59813 47.6752
    8.54224 47.6624
    8.529   47.6491
    8.48908 47.6499
    8.46953 47.6485
    8.44101 47.6582
    8.42457 47.6933
    8.42269 47.7081
    8.45988 47.7438
    8.52979 47.7769
    8.57182 47.7839
    8.56947 47.8053
    8.62885 47.7931
    8.63503 47.7646
    8.64465 47.792
    8.68775 47.7751
    8.70257 47.7617
    8.72933 47.746
    8.73522 47.7193
    8.75652 47.692
    
    结果:
    SwissCheese.png


    好的,这是带有图像的
    ,基本上是一个像素贴图。但如前所述,如果我有边界的x,y坐标,基本上作为一个轮廓,我将如何绘制一张填充的南非地图(其中有“莱索托洞”),我在这张地图上看不到“空”洞。我用一个插图编辑了这个问题,说明了我想要实现的目标。如果您的内部轮廓与外部轮廓在一个单独的数据集中,那么您可以对基于像素的输出执行此操作,但这将涉及gnuplot之外的额外处理。在gnuplot中:1)以不同的颜色绘制完整区域和内部区域作为填充曲线。2) 导出到png。在GIMP或ImageMagick或您选择的图像工具中打开,3)从单击开始按颜色或按区域填充选择内部区域。4) 将选定区域的alpha值设置为完全透明。5) 导出已编辑的图像。好的,是的,这将以某种方式起作用。然而,我希望避免使用外部工具,直接使用gnuplot生成它,而无需进行预处理和后处理。