gpt4 book ai didi

r - 如何为 ggplot 绘图编写测试

转载 作者:行者123 更新时间:2023-11-28 19:38:49 25 4
gpt4 key购买 nike

我有很多生成图的函数,通常是 ggplot2。现在,我正在生成绘图并测试基础数据。但我想知道是否有合理的方法来测试绘图是否包含我期望的图层/选项,或者图形元素是否符合期望。

例如:

library(ggplot2)
library(scales) # for percent()
library(testthat)

df <- data.frame(
Response = LETTERS[1:5],
Proportion = c(0.1,0.2,0.1,0.2,0.4)
)

#' @export plot_fun
plot_fun <- function(df) {
p1 <- ggplot(df, aes(Response, Proportion)) +
geom_bar(stat='identity') +
scale_y_continuous(labels = percent)
return(p1)
}

test_that("Plot returns ggplot object",{
p <- plot_fun(df)
expect_is(p,"ggplot")
})

test_that("Plot uses correct data", {
p <- plot_fun(df)
expect_that(df, equals(p$data))

})

这就是我卡住的地方

test_that("Plot layers match expectations",{
p <- plot_fun(df)
expect_that(...,...)
})

test_that("Scale is labelled percent",{
p <- plot_fun(df)
expect_that(...,...)
})

也许有更直接的方法?

最佳答案

这似乎是你的目标,尽管对绘图参数和内容的具体要求当然会有所不同。但是对于您在上面精心制作的示例,这些测试应该全部通过:

##  Load the proto library for accessing sub-components of the ggplot2
## plot objects:
library(proto)

test_that("Plot layers match expectations",{
p <- plot_fun(df)
expect_is(p$layers[[1]], "proto")
expect_identical(p$layers[[1]]$geom$objname, "bar")
expect_identical(p$layers[[1]]$stat$objname, "identity")
})

test_that("Scale is labelled 'Proportion'",{
p <- plot_fun(df)
expect_identical(p$labels$y, "Proportion")
})

test_that("Scale range is NULL",{
p <- plot_fun(df)
expect_null(p$scales$scales[[1]]$range$range)
})

question and its answers为表征 ggplot 对象的其他方法提供了一个很好的起点,以防您有其他想要测试的东西。

关于r - 如何为 ggplot 绘图编写测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31038709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com