朋友们,我使用gnuplot在图表上打印了大量数据。 由于图中的点数太大,我使用cspline数据插值方法来平滑数据。但是插值方法正在跳过一些异常值,这些异常值在程序性能分析中可能很重要。我应该如何确保gnuplot函数不会错过极端异常值(值差异大于x)。
以下是我用于生成图表的代码。
plot data_file binary format='%uint64 %double %double %double' using 1:2 smooth csplines title "Kernel hit-rate" with lines, \
data_file binary format='%uint64 %double %double %double' using 1:3 smooth csplines title "User hit-rate" with lines, \
data_file binary format='%uint64 %double %double %double' using 1:4 smooth csplines title "Overall hit-rate" with lines
生成的图表如下:
我希望gnuplot只有在它们不太远的情况下才能平滑点(一个可配置的参数)?您还可以建议任何其他可以做我需要的绘图工具吗?
答案 0 :(得分:2)
你可以通过shell magic和set table
的组合来实现这一点。例如:
set samples 200 #How many points will be used in interpolating the data...
YLIMIT=.5 #for example
set table 'junkfile1.dat' #This holds the "smooth" portion
plot 'data_file' binary format='%uint64 %double %double %double' using 1:($2<YLIMIT ? $2: 1/0) smooth csplines
unset table #This holds the "spurious" portion
set table 'junkfile2.dat'
plot 'data_file' binary format='%uint64 %double %double %double' using 1:($2>YLIMIT ? $2: 1/0)
unset table
plot '< sort -n -k 1 junkfile1.dat junkfile2.dat' u 1:2 with lines
!rm junkfile1.dat junkfile2.dat #cleanup after ourselves
(未测试的)