【发布时间】:2012-04-01 10:58:47
【问题描述】:
朋友们,我有大量数据要使用 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 只有在不太远的情况下才能平滑点(可配置参数)??您还可以建议任何其他可以满足我要求的绘图工具吗??
【问题讨论】:
-
请不要进入图的语义。
-
我很困惑,第一个情节是否带有 csplines 而第二个情节没有?如果是这样,您究竟想用 csplines 完成什么(即第二张图有什么问题?)
-
(1) 第一个图有 csplines,第二部分没有 csplines。 (2) 如您所见,在第二张图中,我们可以看到一些 y 值达到 0.8 到 0.9 。不幸的是,第一张图在 (5000) 附近的 x 范围的峰值约为 0.1
-
但是第二个情节有什么问题?如果您想保留虚假峰值,似乎使用 csplines 与您想要完成的完全相反。 -- 作为旁注,使用
set samples N可用于增加您的采样频率,这可能会使第一个图看起来更像第二个图(具有相当大的 N)... -
此外,gnuplot 有多种平滑选项:来自内置帮助:` smooth {unique |频率 |累积 | k密度 | csplines | acsplines |贝塞尔 | sbezier}` -- 你可以试试其他的,看看效果如何。
标签: plot matplotlib gnuplot