两个月之间的Gnuplot百分比差异

两个月之间的Gnuplot百分比差异,gnuplot,percentage,Gnuplot,Percentage,我有一个csv文件,收集了5年的恶意软件数据,有2列日期和IP,每个日期有一个或多个IP示例 1/5/2013 12.234.123 1/5/2013 45.123.566 1/5/2013 100.546.12 1/6/2013 42.153.756 3/4/2014 75.356.258 etc... (every day for 5 years) 现在我试图得到每个月之间的百分比差异示例: November 2014 - 10% December 2014 - 15% 我试着把百分比放

我有一个csv文件,收集了5年的恶意软件数据,有2列日期和IP,每个日期有一个或多个IP示例

1/5/2013 12.234.123
1/5/2013 45.123.566
1/5/2013 100.546.12
1/6/2013 42.153.756
3/4/2014 75.356.258 etc... (every day for 5 years)
现在我试图得到每个月之间的百分比差异示例:

November 2014 - 10%
December 2014 - 15%
我试着把百分比放在y轴和x2轴上,但我得到了一些疯狂的结果我对gnuplot是新手,我还在学习这是我现在的代码:

set title 'Results Per Month'
set xlabel 'Date'
set ylabel 'Percentage'
set terminal png size 2800,900
set datafile sep ','
set xdata time

set timefmt '%Y/%m/%d'
set xrange['2009/3/22':'2014/12/02']
set xtics 30*24*60*60
set format x '%Y/%m'

set autoscale x2fix
set x2tics 
set x2range[0:*]
set format x2 "%g %%"

set xtics nomirror rotate by -90
set grid ytics xtics
set ytics 10
set yrange [0:*]
set term png
set output 'file.png'

plot 'export.csv' using (timecolumn(1) - (tm_mday(timecolumn(1))-1)*24*60*60):(1) smooth frequency w lp pt 7 ps 2 notitle, \
'' using (($1-$2)/$1*100):x2ticlabels(2) axes x2y1 with points ps 2 lw 2

我建议您使用一些外部脚本来进行此类预处理(您也可以动态地执行此操作)。是的,您可以通过两个步骤在gnuplot中实现这一点,但这可能会变得非常复杂,并且需要对gnuplot有更深入的了解

下面是一个工作脚本,但我不会详细介绍实际实现的许多不同方面:

set xdata time
set timefmt '%Y/%m/%d'
set datafile separator ','

set table 'temporaryfile.dat'
set format x '%Y/%m/%d'
plot 'export.csv' using (timecolumn(1) - (tm_mday(timecolumn(1))-1)*24*60*60):(1) smooth frequency 
unset table

set y2tics
set ytics nomirror
set timefmt '"%Y/%m/%d"'
set format x '%b %Y'
set xtics rotate by 90 right

set datafile separator white
set yrange[0:*]
x0=x1=0
plot 'temporaryfile.dat' using 1:(strcol(3) eq "i" ? $2 : 1/0) w lp pt 7 ps 2 title 'IP count', \
     '' using 1:(x1=x0, x0=$2, strcol(3) eq "i" ? ($0 == 0 || x0 == 0 ? 0 : (x0-x1)/x0 * 100.0) : 1/0) axes x1y2 w lp title 'percentual change'
基本上,首先将
平滑频率的结果数据绘制到第二个数据文件中。然后,您可以绘制此图,并对百分比进行计算

请注意,我使用的时间格式与您的测试数据(以及上一个问题的数据)相对应,但与您的脚本中的数据不一致!请注意这个

还要注意的是,实际绘图之前的时间必须用引号延长,引号写在
tmp.dat
中的日期周围

最后,strcol(3)eq'i'
是避免gnuplot错误所必需的,gnuplot错误会导致最后一行写入无效数据


非常感谢terminal a.conf文件,我尝试了您的代码,但出现了一个错误:“test.conf”,第6行:警告:跳过没有有效点的数据文件使用(timecolumn(1)-(tm_mday(timecolumn(1))-1)*24*60*60:(1)平滑频率^“test.conf,第6行:x范围无效,因为我写道:它应该与您发布的测试数据一起工作,这似乎与您实际拥有的数据不同。因为我猜不出哪个版本是正确的,所以你必须自己修改这部分时间。那么修改脚本有什么问题呢?我正在运行你上面给出的代码,脚本在运行后删除csv文件中的所有数据,我在终端中得到这个错误:“test.conf”,第6行:警告:跳过没有有效点的数据文件使用(timecolumn(1)-(tm_mday(timecolumn(1))-1)*24*60*60)打印“export.csv”:(1)平滑频率^“test.conf”,第6行:x范围无效脚本使用两个不同的文件名!有关完全简化的脚本,请参阅更新。。。