我想知道是否有办法询问 R 情节是否具有固定的纵横比。下面是两个示例图:

library (ggplot2)

plot_a <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
          geom_point()+
          theme (aspect.ratio = 1)

plot_b <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
          geom_point()
plot_a 具有固定的纵横比,而 plot_b 没有固定的纵横比。我正在寻找以下虚函数:
is_fixed_ratio (plot_a)
TRUE

is_fixed_ratio (plot_b)
FALSE

有没有办法做到这一点?

最佳答案

假设我们有以下图:

library (ggplot2)

plot_a <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
          geom_point()+
          theme (aspect.ratio = 1)

plot_b <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
          geom_point()

plot_c <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
          geom_point() +
          coord_equal()

当前接受的答案将如下处理:
is_fixed_ratio <- function(plot){
  purrr::map(plot, "aspect.ratio") %>%
    unlist() %>%
    is.null() %>%
    !.
}
> is_fixed_ratio(plot_a)
[1] TRUE
> is_fixed_ratio(plot_b)
[1] FALSE
> is_fixed_ratio(plot_c)
[1] FALSE

plot_c 确实有一个固定的纵横比,只是没有通过主题指定。

要检查这一点,您可以检查绘图的 gtable:
is_fixed_ratio2 <- function(plot) {
  ggplotGrob(plot)$respect
}
> is_fixed_ratio2(plot_a)
[1] TRUE
> is_fixed_ratio2(plot_b)
[1] FALSE
> is_fixed_ratio2(plot_c)
[1] TRUE

关于r - 如何在 R 中测试图是否具有固定的纵横比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58732919/

10-10 05:03