如何解决如何使用字符串绘制周数并使用 Gnuplot 控制 xtics 增量?
如何在(第 3 列)内绘制带有字符串 (W) 的时间样本?
以及如何使用时间格式控制 xtics 增量?
几行数据:
France,FR,2020-W09,118,3318,67012883,4.95128675481698,3.55635925256178,TESSy
France,2020-W10,996,11101,16.5654714482288,8.97216466984956,2020-W11,4297,29623,44.2049329529667,14.5056206326166,2020-W12,10595,73235,109.28495644636,14.4671263740015,2020-W13,24156,122870,183.35280396756,19.6598030438675,2020-W14,30304,127029,189.55907329043,23.8559698966378,2020-W15,24925,140316,209.386604065371,17.7634767239659,TESSy
我的脚本:
#https://www.ecdc.europa.eu/en/publications-data/covid-19-testing
#Data (105,77K) here :
system("wget https://opendata.ecdc.europa.eu/covid19/testing/csv -P $PWD -O testing.csv")
reset
set term wxt font ',11' size 1200,800
set datafile separator ","
set grid
#set key at screen 0.9,0.9
timefmt = "%Y-%s%W"
set xdata time
set xtics format timefmt timedate rotate by -45
SECPERWEEK = 3600.*24.*7.
Y_W(col) = timecolumn(col,timefmt) + SECPERWEEK * (strcol(col)[2:3] - 1)
plot '< grep France testing.csv' u (Y_W(3)):4 notitle w l
谢谢
解决方法
这是我将如何做的建议。它可能不明显,看起来可能有点复杂,但它是一个 gnuplot-only 解决方案。
因为我不运行 Linux,所以我没有 grep
,这就是我在 gnuplot 本身中定义 myFilter()
的原因,它是独立于平台的。
每次此过滤器命中时,计数器 t
都会增加 1,这样的优点是数据可以包含交错混合的国家/地区。我认为这也是 grep
允许的。这里唯一的假设是周数按(升序)顺序排列,它们不会被排序。
我想这里没有必要将 x 轴作为时间格式。
如果缺少日历周并且您希望为它们保留相应的间隙,情况会有所不同。
使用 myOffset=0
和 myEvery=2
,您可以设置要显示的 x-tic 标签数量。
当然还有改进的余地,我相信还有其他解决方案......所以,作为一个起点......
代码:
### plot filtered data with custom xtics
reset session
$Data <<EOD
France,FR,2020-W09,118,3318,67012883,4.95128675481698,3.55635925256178,TESSy
France,2020-W10,996,11101,16.5654714482288,8.97216466984956,2020-W11,4297,29623,44.2049329529667,14.5056206326166,TESSy
Luxembourg,LU,11,222,33333333,44.4444444444444,55.5555555555555,fghij
Luxembourg,2020-W12,fghij
France,10595,73235,109.28495644636,14.4671263740015,2020-W13,24156,122870,183.35280396756,19.6598030438675,TESSy
Belgium,BE,1111,222222,444.44444444444,abcde
Belgium,2020-W14,abcde
France,30304,127029,189.55907329043,23.8559698966378,2020-W15,24925,140316,209.386604065371,17.7634767239659,TESSy
EOD
set datafile separator comma
set datafile missing NaN
set xtics rotate by -45
myFilter(dcol,fcol,key) = strcol(fcol) eq key ? (t=t+1,column(dcol)) : NaN
myXtic(col) = sprintf("%s",(t+myOffset)% myEvery ? "" : strcol(col))
myKey = 'France'
myOffset = 0
myEvery = 2
plot t=1 $Data u (t):(myFilter(4,1,myKey)):xtic(myXtic(3)) w lp pt 7 title myKey
### end of code
结果:
,基本错误是 collection.find({
$where: function(){
return this.history[this.history.length-1].state === "completed"
}
})
函数在错误的列中查找周数。它应该是子串 7 到 8 而不是 2 到 3。
Y_W
正如 theozh 在此 answer 中所解释的,gnuplot 默认使用美国周数,而不是 ISO 8601,所以我没有在这里解决这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。