如何根据基准测试结果获取曲线或折线图?
How to obtain curve or line graph based on benchmark result?
我想根据基准测试结果生成漂亮的折线图或曲线。我使用 rbenchmark
包来评估功能列表。但是,我打算生成折线图或曲线,其中 X 轴显示选定的 csv 文件(两个或三个文件),Y 轴显示 运行 时间。如何根据基准测试结果获得所需的折线图或散点图或曲线图?谁能指出我如何轻松做到这一点?我怎样才能实现我想要的情节?有什么想法吗?
请注意,我尝试 rbenchmark
包以这种方式生成基准测试结果:
benchmark(
s1=myFunc1,
s2=myFunc2,
s3=myFunc3,
...
s10=myFunc10,
order="elapsed", replications=10
)
迷你示例:
要重现基准测试结果,这里是 data.frame :
benchResult <- data.frame(
test=c("s5","s1","s6","s9","s2","s3","s4","s7","s8","s10"),
replications=c(10,10,10,10,10,10,10,10,10,10),
elapsed=c(0.10,0.11,0.30,0.32,0.75,0.98,3.43,8.07,13.22,30.48),
relative=c(1.0,1.1,3.0,3.2,7.5,9.8,34.3,80.7,132.2,304.8),
user.self=c(0.11,0.03,0.30,0.33,0.75, 0.73,3.36,8.07,13.21,27.70),
sys.self=c(0.00,0.02,0.00,0.00,0.00,0.09,0.00,0.00,0.00,0.31)
)
我得到了这个基准测试结果:
test replications elapsed relative user.self sys.self user.child sys.child
5 s5 10 0.10 1.0 0.11 0.00 NA NA
1 s1 10 0.11 1.1 0.03 0.02 NA NA
6 s6 10 0.30 3.0 0.30 0.00 NA NA
9 s9 10 0.32 3.2 0.33 0.00 NA NA
2 s2 10 0.75 7.5 0.75 0.00 NA NA
3 s3 10 0.98 9.8 0.73 0.09 NA NA
4 s4 10 3.43 34.3 3.36 0.00 NA NA
7 s7 10 8.07 80.7 8.07 0.00 NA NA
8 s8 10 13.22 132.2 13.21 0.00 NA NA
10 s10 10 30.48 304.8 27.70 0.31 NA NA
如何根据这个基准测试结果得到漂亮的折线图或曲线?我怎样才能通过使用 ggplot2
来实现这一点?提前致谢!
答案分为两部分:
microbenchmark
包包含 autoplot
方法用于 ggplot2
- 绘制给定
benchResult
数据框的代码
1。 microbenchmark
包裹
autoplot
方法使用 ggplot2
生成更清晰的微基准计时图表。例如,
tm <- microbenchmark::microbenchmark(
rchisq(100, 0),
rchisq(100, 1),
rchisq(100, 2),
rchisq(100, 3),
rchisq(100, 5), times=1000L)
ggplot2::autoplot(tm)
创建以下图:
地块由 geom_violin
创建。小提琴图是用于显示连续分布的镜像密度图。
编辑 应 OP 的要求,这里有更多详细信息:
tm
是 class microbenchmark
的一个对象,一个包含 5000 次基准测试运行结果的数据框(每次 5 个表达式 x 1000 次重复)。有关详细信息,请参阅帮助页面 ?microbenchmark
的 Value 部分。
打印此对象时,会给出结果摘要:
print(tm)
#Unit: microseconds
# expr min lq mean median uq max neval
# rchisq(100, 0) 2.266 2.644 3.180188 2.644 3.0210 57.393 1000
# rchisq(100, 1) 16.614 19.257 21.412456 20.012 20.7675 80.048 1000
# rchisq(100, 2) 9.063 12.839 15.289609 14.349 15.8590 151.410 1000
# rchisq(100, 3) 8.307 12.460 16.291712 13.593 15.1040 1449.913 1000
# rchisq(100, 5) 7.929 11.706 26.683478 13.593 16.0475 11920.243 1000
autoplot
和 print
都是为 class microbenchmark
的对象定义的方法,当应用于像 benchResult
。
2。 benchResult
的情节
您还可以使用
绘制基准测试结果
library(ggplot2)
ggplot(benchResult, aes(x = forcats::fct_inorder(test), y = elapsed, group = 1)) +
geom_line() +
xlab("test")
制作这张图表:
请注意对 forcats::fct_inorder()
的调用,它以与 benchResult$test
中出现的值相同的顺序对因子水平进行重新排序。这是必需的,因为 ggplot2
对离散变量使用因子,并且级别的默认顺序是按字母顺序排列的,这将按 s1、s10、s2、s3 的顺序绘制测试。
我想根据基准测试结果生成漂亮的折线图或曲线。我使用 rbenchmark
包来评估功能列表。但是,我打算生成折线图或曲线,其中 X 轴显示选定的 csv 文件(两个或三个文件),Y 轴显示 运行 时间。如何根据基准测试结果获得所需的折线图或散点图或曲线图?谁能指出我如何轻松做到这一点?我怎样才能实现我想要的情节?有什么想法吗?
请注意,我尝试 rbenchmark
包以这种方式生成基准测试结果:
benchmark(
s1=myFunc1,
s2=myFunc2,
s3=myFunc3,
...
s10=myFunc10,
order="elapsed", replications=10
)
迷你示例:
要重现基准测试结果,这里是 data.frame :
benchResult <- data.frame(
test=c("s5","s1","s6","s9","s2","s3","s4","s7","s8","s10"),
replications=c(10,10,10,10,10,10,10,10,10,10),
elapsed=c(0.10,0.11,0.30,0.32,0.75,0.98,3.43,8.07,13.22,30.48),
relative=c(1.0,1.1,3.0,3.2,7.5,9.8,34.3,80.7,132.2,304.8),
user.self=c(0.11,0.03,0.30,0.33,0.75, 0.73,3.36,8.07,13.21,27.70),
sys.self=c(0.00,0.02,0.00,0.00,0.00,0.09,0.00,0.00,0.00,0.31)
)
我得到了这个基准测试结果:
test replications elapsed relative user.self sys.self user.child sys.child
5 s5 10 0.10 1.0 0.11 0.00 NA NA
1 s1 10 0.11 1.1 0.03 0.02 NA NA
6 s6 10 0.30 3.0 0.30 0.00 NA NA
9 s9 10 0.32 3.2 0.33 0.00 NA NA
2 s2 10 0.75 7.5 0.75 0.00 NA NA
3 s3 10 0.98 9.8 0.73 0.09 NA NA
4 s4 10 3.43 34.3 3.36 0.00 NA NA
7 s7 10 8.07 80.7 8.07 0.00 NA NA
8 s8 10 13.22 132.2 13.21 0.00 NA NA
10 s10 10 30.48 304.8 27.70 0.31 NA NA
如何根据这个基准测试结果得到漂亮的折线图或曲线?我怎样才能通过使用 ggplot2
来实现这一点?提前致谢!
答案分为两部分:
microbenchmark
包包含autoplot
方法用于ggplot2
- 绘制给定
benchResult
数据框的代码
1。 microbenchmark
包裹
autoplot
方法使用 ggplot2
生成更清晰的微基准计时图表。例如,
tm <- microbenchmark::microbenchmark(
rchisq(100, 0),
rchisq(100, 1),
rchisq(100, 2),
rchisq(100, 3),
rchisq(100, 5), times=1000L)
ggplot2::autoplot(tm)
创建以下图:
地块由 geom_violin
创建。小提琴图是用于显示连续分布的镜像密度图。
编辑 应 OP 的要求,这里有更多详细信息:
tm
是 class microbenchmark
的一个对象,一个包含 5000 次基准测试运行结果的数据框(每次 5 个表达式 x 1000 次重复)。有关详细信息,请参阅帮助页面 ?microbenchmark
的 Value 部分。
打印此对象时,会给出结果摘要:
print(tm)
#Unit: microseconds
# expr min lq mean median uq max neval
# rchisq(100, 0) 2.266 2.644 3.180188 2.644 3.0210 57.393 1000
# rchisq(100, 1) 16.614 19.257 21.412456 20.012 20.7675 80.048 1000
# rchisq(100, 2) 9.063 12.839 15.289609 14.349 15.8590 151.410 1000
# rchisq(100, 3) 8.307 12.460 16.291712 13.593 15.1040 1449.913 1000
# rchisq(100, 5) 7.929 11.706 26.683478 13.593 16.0475 11920.243 1000
autoplot
和 print
都是为 class microbenchmark
的对象定义的方法,当应用于像 benchResult
。
2。 benchResult
的情节
您还可以使用
绘制基准测试结果library(ggplot2)
ggplot(benchResult, aes(x = forcats::fct_inorder(test), y = elapsed, group = 1)) +
geom_line() +
xlab("test")
制作这张图表:
请注意对 forcats::fct_inorder()
的调用,它以与 benchResult$test
中出现的值相同的顺序对因子水平进行重新排序。这是必需的,因为 ggplot2
对离散变量使用因子,并且级别的默认顺序是按字母顺序排列的,这将按 s1、s10、s2、s3 的顺序绘制测试。