如何为ggplot绘制一个测试

我有很多功能生成图,通常使用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对象,以防万一你有其他的东西你想测试。

翻译自:https://stackoverflow.com/questions/31038709/how-to-write-a-test-for-a-ggplot-plot

转载注明原文:如何为ggplot绘制一个测试