diff --git a/NEWS.md b/NEWS.md index 762df24359..9f4fe92385 100644 --- a/NEWS.md +++ b/NEWS.md @@ -10,6 +10,8 @@ ## BUG FIXES +* `ggplotly()` now handles discrete axes of a `facet_wrap` and `facet_grid` correctly when there is only one category in panels > 1 (#1577 and #1720). + * `ggplotly()` now handles `element_blank()` and `factor()` labels in positional scales correctly (#1731 and #1772). # 4.9.2.1 diff --git a/R/utils.R b/R/utils.R index 6fc2472f13..93dd1461b5 100644 --- a/R/utils.R +++ b/R/utils.R @@ -521,7 +521,7 @@ verify_attr <- function(proposed, schema, layoutAttr = FALSE) { # do the same for "sub-attributes" if (identical(role, "object") && is.recursive(proposed[[attr]])) { - proposed[[attr]] <- verify_attr(proposed[[attr]], schema[[attr]], layoutAttr = layoutAttr) + proposed[[attr]] <- verify_attr(proposed[[attr]], attrSchema, layoutAttr = layoutAttr) } } diff --git a/tests/testthat/test-facet-axis.R b/tests/testthat/test-facet-axis.R new file mode 100644 index 0000000000..62562c9319 --- /dev/null +++ b/tests/testthat/test-facet-axis.R @@ -0,0 +1,15 @@ +test_that("ggplotly does not break discrete x-axis with facet_yyyy in panels > 1 with only one category", { + d <- data.frame(cat = c("A", "A", "A"), pan = paste("Panel", c(1, 2, 2))) + gp <- ggplot(d, aes(cat)) + + geom_bar() + + facet_wrap(~pan) + L <- plotly_build(ggplotly(gp)) + # tickvals, ticktext and categoryarray have class 'AsIs' + lapply(L$x$layout[c("xaxis", "xaxis2")], function(axis) { + expect_s3_class(axis$tickvals, "AsIs") + expect_s3_class(axis$ticktext, "AsIs") + expect_true(axis$ticktext == "A") + expect_s3_class(axis$categoryarray, "AsIs") + expect_true(axis$categoryarray == "A") + }) +})