如何制作边缘标记颜色

How to make edge marker color

Matplotlib 可以选择指定边缘颜色,例如 How to set the border color of the dots in matplotlib's scatterplots?

在 gnuplot 中,我使用

array data[500]
do for [i=1:500] {data[i]=invnorm(rand(0))}

pl data ps 2 pt 7, "" ps 2 pt 6 lc "black"

但是,这需要对数据进行第二次循环(以及更多的重复输入,尤其是在涉及更复杂的列操作时)。而且,图例并不像预期的那样。

如何修复图例?或者有更好的方法吗?

(例如,对于 postscript 终端,解决方案是解析输出,set out "| sed '/ hpt 0 360/s/ Pnt//; s,hpt.*arc fill, 2 copy & stroke LTb Circle, ' > out.ps。)

您可以使用绘图样式 with circles。检查 help circles.

代码:

### "points" with outline --> with circles
reset session

set print $Data
do for [i=1:200] {
    print sprintf("%g %g", invnorm(rand(0)),invnorm(rand(0)))
}
set print

set style circle radius graph 0.01 wedge
set style fill solid 1.0 border lc "black"

plot $Data u 1:2 w circles fc "red" 
### end of code

结果:

加法:

只是为了好玩...这是一种绘制带边框的三角形(或正方形、菱形或五边形)的方法。 绘制数据两次的简单方法,一次用封闭符号,一次用开放符号,并不能给出所需的结果(见左图)。实际上,您必须复制每一行并绘制交替的封闭和开放符号(右图)。但是,我还没有找到在图例中显示带有边框的符号的解决方案。

代码:

### triangles with border
reset session

set print $Data
    do for [i=1:100] {
        print sprintf("%g %g", invnorm(rand(0)),invnorm(rand(0)))
    }
set print

# duplicate each line
set print $Data2
    do for [i=1:|$Data|] {
        print $Data[i]
        print $Data[i]
    }
set print

set key out center top noautotitle
myPt = 9    # 5=square, 7=circle, 9=triangle up, 11=triangle down, 13=diamond, 15=pentagon
myLw = 1.5
myPs = 4
myColor(col) = int(column(col))%2 ? 0x000000 : 0xffff00
myPoint(col) = int(column(col))%2 ? myPt-1: myPt

set multiplot layout 1,2
    plot $Data u 1:2 w p pt myPt   ps myPs lc "yellow" ti "serial", \
            '' u 1:2 w p pt myPt-1 ps myPs lw myLw lc "black"
    
    plot $Data2 u 1:2:(myPoint(0)):(myColor(0)) w p pt var ps myPs lw myLw lc rgb var, \
         keyentry w p pt myPt ps myPs lc rgb 0xffff00 ti "alternating"
unset multiplot
### end of code

结果: