diff --git a/R/ggplotly.R b/R/ggplotly.R index 1c2073f9b6..a311761289 100644 --- a/R/ggplotly.R +++ b/R/ggplotly.R @@ -922,6 +922,7 @@ gg2list <- function(p, width = NULL, height = NULL, lay[names(plot$facet$params[[col_vars]])] ), collapse = br() ) + if (length(names(plot$facet$params[[col_vars]])) == 0) col_txt <- "" if (is_blank(theme[["strip.text.x"]])) col_txt <- "" if (inherits(plot$facet, "FacetGrid") && lay$ROW != 1) col_txt <- "" if (robust_nchar(col_txt) > 0) { @@ -934,22 +935,27 @@ gg2list <- function(p, width = NULL, height = NULL, strip <- make_strip_rect(xdom, ydom, theme, "top") gglayout$shapes <- c(gglayout$shapes, strip) } - row_txt <- paste( - plot$facet$params$labeller( - lay[names(plot$facet$params$rows)] - ), collapse = br() - ) - if (is_blank(theme[["strip.text.y"]])) row_txt <- "" - if (inherits(plot$facet, "FacetGrid") && lay$COL != nCols) row_txt <- "" - if (robust_nchar(row_txt) > 0) { - row_lab <- make_label( - row_txt, x = max(xdom), y = mean(ydom), - el = theme[["strip.text.y"]] %||% theme[["strip.text"]], - xanchor = "left", yanchor = "middle" + # Only FacetGrid has no cols + if (inherits(plot$facet, "FacetGrid")) { + row_txt <- paste( + plot$facet$params$labeller( + lay[names(plot$facet$params$rows)] + ), + collapse = br() ) - gglayout$annotations <- c(gglayout$annotations, row_lab) - strip <- make_strip_rect(xdom, ydom, theme, "right") - gglayout$shapes <- c(gglayout$shapes, strip) + if (length(names(plot$facet$params$rows)) == 0) row_txt <- "" + if (is_blank(theme[["strip.text.y"]])) row_txt <- "" + if (lay$COL != nCols) row_txt <- "" + if (robust_nchar(row_txt) > 0) { + row_lab <- make_label( + row_txt, x = max(xdom), y = mean(ydom), + el = theme[["strip.text.y"]] %||% theme[["strip.text"]], + xanchor = "left", yanchor = "middle" + ) + gglayout$annotations <- c(gglayout$annotations, row_lab) + strip <- make_strip_rect(xdom, ydom, theme, "right") + gglayout$shapes <- c(gglayout$shapes, strip) + } } } } # end of panel loop diff --git a/tests/testthat/test-ggplot-facets.R b/tests/testthat/test-ggplot-facets.R index d8fd07c627..36d7a35af8 100644 --- a/tests/testthat/test-ggplot-facets.R +++ b/tests/testthat/test-ggplot-facets.R @@ -131,6 +131,47 @@ test_that("facet_grid translates simple labeller function", { ) }) +g <- ggplot(mtcars, aes(mpg, wt)) + + geom_point() + + facet_wrap( ~ vs + am, labeller = function(x) label_both(x, multi_line = FALSE)) + +test_that("facet_wrap accounts for multi_line=FALSE", { + info <- expect_doppelganger_built(g, "facet_wrap-labeller-no-multi-line") + txt <- sapply(info$layout$annotations, "[[", "text") + expect_true(all(!grepl("expression(list())", txt, fixed = TRUE))) + expect_true( + all(c("vs, am: 0, 0", "vs, am: 0, 1", "vs, am: 1, 0", "vs, am: 1, 1") %in% txt) + ) + expect_identical(length(txt), 6L) +}) + +g <- ggplot(mtcars, aes(mpg, wt)) + + geom_point() + +g_no_col <- g + + facet_grid(vs + am ~ ., labeller = function(x) label_both(x, multi_line = FALSE)) + +g_no_row <- g + + facet_grid(. ~ vs + am, labeller = function(x) label_both(x, multi_line = FALSE)) + +test_that("facet_grid accounts for multi_line=FALSE", { + info <- expect_doppelganger_built(g_no_col, "facet_grid-labeller-no-col") + txt <- sapply(info$layout$annotations, "[[", "text") + expect_true(all(!grepl("expression(list())", txt, fixed = TRUE))) + expect_true( + all(c("vs, am: 0, 0", "vs, am: 0, 1", "vs, am: 1, 0", "vs, am: 1, 1") %in% txt) + ) + expect_identical(length(txt), 6L) + + info <- expect_doppelganger_built(g_no_row, "facet_grid-labeller-no-col") + txt <- sapply(info$layout$annotations, "[[", "text") + expect_true(all(!grepl("expression(list())", txt, fixed = TRUE))) + expect_true( + all(c("vs, am: 0, 0", "vs, am: 0, 1", "vs, am: 1, 0", "vs, am: 1, 1") %in% txt) + ) + expect_identical(length(txt), 6L) +}) + p <- economics %>% tidyr::gather(variable, value, -date) %>% qplot(data = ., date, value) + facet_wrap(~variable, scale = "free_y", ncol = 2)