R语言 在ggplot2中使用不同轴比例对geom_tile进行分面处理可生成带状图像

xe55xuns  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(71)

我在ggplot中遇到了一些意想不到的行为,geom_tile()facet ing。
下面是经典的"火山"瓷砖:

library(ggplot2)
library(reshape2)
volcano %>%
  reshape2::melt() %>%
  ggplot() + geom_tile(aes(x = Var1, y = Var2, fill = value))

字符串


的数据
很好。现在让我们添加一个索引列并facet图像.

volcano %>%
  reshape2::melt() %>%
  cross_join(tibble(idx = c(1,2,3))) %>%
  ggplot() + geom_tile(aes(x = Var1, y = Var2, fill = value)) +
    facet_wrap(vars(idx))



好的。很好。现在我将在x轴上创建不同的比例,并使用scales = "free"参数.

volcano %>%
  reshape2::melt() %>%
  cross_join(tibble(idx = c(1,2,3))) %>%
  mutate(Var1 = Var1/idx) %>%
  ggplot() + geom_tile(aes(x = Var1, y = Var2, fill = value)) +
  facet_wrap(vars(idx), scales = "free")
}

请注意,上一个图表和此图表之间的x轴值不同。
这并不是说ggplot在重新缩放轴上有根本性的问题,这里我单独绘制了前一张图像的第三个面板,没有facet的影响。

volcano %>%
  reshape2::melt() %>%
  cross_join(tibble(idx = c(1,2,3))) %>%
  mutate(Var1 = Var1/idx) %>%
  filter(idx == 3) %>%
  ggplot() + geom_tile(aes(x = Var1, y = Var2, fill = value))

这个问题是facet与不同的比例。这个问题仍然存在,即使我不使用scales = "free"参数...

volcano %>%
  reshape2::melt() %>%
  cross_join(tibble(idx = c(1,2,3))) %>%
  mutate(Var1 = Var1/idx) %>%
  ggplot() + geom_tile(aes(x = Var1, y = Var2, fill = value)) +
  facet_wrap(vars(idx))

对我来说似乎是一个bug,但是当我在github tidyverse/ggplot上搜索"geom_tile facet"时,我没有看到问题报告。
有没有人知道我怎么能得到一个适当的情节没有乐队?
更新:这里有一个小例子,显示了更详细的情况。ggplot似乎是使用一个比例计算图块中每列的宽度,并将该宽度应用于所有图.

# make some data
data.frame(x = 1:10, y = rep(1:10, each=10), value = runif(100)) %>%

  # duplicate the data and alter the scale of the second set
  bind_rows(., mutate(., x=x/3), .id = "idx") %>%

  # plot with faceting
  ggplot() + geom_tile(aes(x=x, y=y, fill = value)) + facet_wrap("idx")

dly7yett

dly7yett1#

您可以根据面改变切片宽度。ggplot2切片基于ggplot2标识的数据“分辨率”。

volcano %>%
  reshape2::melt() %>%
  cross_join(tibble(idx = c(1,2,3))) %>%
  mutate(width = max(diff(Var1), na.rm = TRUE), .by = idx) |>
   ggplot() + 
  geom_tile(aes(x = Var1, y = Var2, fill = value, width = width)) +
  facet_wrap(vars(idx), scales = "free")

字符串


的数据

相关问题