我在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")
1条答案
按热度按时间dly7yett1#
您可以根据面改变切片宽度。ggplot2切片基于ggplot2标识的数据“分辨率”。
字符串
的数据