Gnuplot将多个值类型组合在一个具有不同颜色和破折号的折线图中

Gnuplot将多个值类型组合在一个具有不同颜色和破折号的折线图中,gnuplot,Gnuplot,我有三条不同的线,其中颜色和虚线表示不同的东西,我希望在一个情节上,而不是三个。我如何做到这一点 set datafile separator comma $sample <<EOD 2020-01-01,4,UK,Business 2020-02-01,4,UK,Business 2020-01-01,4,UK,Social 2020-02-01,15,UK,Social 2020-01-01,1,USA,Social 2020-02-01,25,USA,Social EOD s

我有三条不同的线,其中颜色和虚线表示不同的东西,我希望在一个情节上,而不是三个。我如何做到这一点

set datafile separator comma
$sample <<EOD
2020-01-01,4,UK,Business
2020-02-01,4,UK,Business
2020-01-01,4,UK,Social
2020-02-01,15,UK,Social
2020-01-01,1,USA,Social
2020-02-01,25,USA,Social
EOD

set format x '%Y'
set xdata time
set timefmt "%Y-%m-%d"
plot '$sample' u 1:2 title "UK/Business" with linespoints dt 3 lw 5 pt 7 lc "red"
设置数据文件分隔符逗号

$sample请查看手册或帮助绘图
。同一绘图的绘图元素用逗号分隔

语法:

  plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>}
添加:(取决于两个(字符串)列的筛选器)

可以使用三元运算符实现过滤器。检查
help
help strcol
。未通过过滤器的值将设置为
NaN
。如果仍希望点与线连接,则需要
设置数据文件缺失NaN

代码:

### filtered data with different line colors
reset session
set datafile separator comma

$sample <<EOD
2020-01-01,4,UK,Business
2020-02-01,4,UK,Business
2020-01-01,4,UK,Social
2020-02-01,15,UK,Social
2020-01-01,1,USA,Social
2020-02-01,25,USA,Social
EOD

myTimeFmt = "%Y-%m-%d"
set format x '%d.%m.%Y' timedate
set key top left
set datafile missing NaN

myFilter(colData,colFilter1,key1,colFilter2,key2) = (strcol(colFilter1) eq key1) && (strcol(colFilter2) eq key2) ?  column(colData) : NaN

plot $sample u (timecolumn(1,myTimeFmt)):(myFilter(2,3,"UK",4,"Business")) w lp dt 3 lw 5 pt 7 lc "red" title "UK/Business", \
     '' u (timecolumn(1,myTimeFmt)):(myFilter(2,3,"USA",4,"Social")) w lp dt 3 lw 1 pt 7 lc "blue" title "USA/Social" , \
     '' u (timecolumn(1,myTimeFmt)):(myFilter(2,3,"UK",4,"Social")) w lp dt 3 lw 5 pt 7 lc "blue" title "UK/Social"
### end of code
结果:

### filtered data with different line colors
reset session
set datafile separator comma

$sample <<EOD
2020-01-01,4,UK,Business
2020-02-01,4,UK,Business
2020-01-01,4,UK,Social
2020-02-01,15,UK,Social
2020-01-01,1,USA,Social
2020-02-01,25,USA,Social
EOD

myTimeFmt = "%Y-%m-%d"
set format x '%d.%m.%Y' timedate
set key top left
set datafile missing NaN

myFilter(colData,colFilter1,key1,colFilter2,key2) = (strcol(colFilter1) eq key1) && (strcol(colFilter2) eq key2) ?  column(colData) : NaN

plot $sample u (timecolumn(1,myTimeFmt)):(myFilter(2,3,"UK",4,"Business")) w lp dt 3 lw 5 pt 7 lc "red" title "UK/Business", \
     '' u (timecolumn(1,myTimeFmt)):(myFilter(2,3,"USA",4,"Social")) w lp dt 3 lw 1 pt 7 lc "blue" title "USA/Social" , \
     '' u (timecolumn(1,myTimeFmt)):(myFilter(2,3,"UK",4,"Social")) w lp dt 3 lw 5 pt 7 lc "blue" title "UK/Social"
### end of code

我知道您希望在一个绘图中显示三条线。但不确定您是否也希望按关键字进行分离/过滤?是的,我只希望“社交”为蓝色,而美国只需要细点。我需要某种过滤器。仅当匹配此字符串时,使用这些颜色打印。我想知道线的颜色和点是否可以用
lc变量
完成,当然可以。检查
帮助点
。您可以将
ps-var-pt-var-lc-var
(点大小、点类型、线颜色)作为变量。据我所知,您不能将其与线宽(
lw
)和dashtype(
dt
)一起使用。但也许您可以使用线型(
ls
)或线型(
lt
)。检查这些关键字的帮助。
...
...
myTime(col) = timecolumn(col,myTimeFmt)
myFilter(key1,key2) = (strcol(3) eq key1) && (strcol(4) eq key2) ?  column(2) : NaN

plot $sample u (myTime(1)):(myFilter("UK","Business")) w lp dt 3 lw 5 pt 7 lc "red" title "UK/Business", \
     '' u (myTime(1)):(myFilter("USA","Social")) w lp dt 3 lw 1 pt 7 lc "blue" title "USA/Social" , \
     '' u (myTime(1)):(myFilter("UK","Social")) w lp dt 3 lw 5 pt 7 lc "blue" title "UK/Social"