gpt4 book ai didi

r - ggplot facet 网格条形图上的不同 y 限制?

转载 作者:行者123 更新时间:2023-12-04 00:22:24 24 4
gpt4 key购买 nike

我的数据:

    day variable      value
1 Fri avg1 446.521127
2 Mon avg1 461.676056
3 Sat avg1 393.366197
4 Sun avg1 435.985714
5 Thu avg1 445.571429
6 Tue avg1 441.549296
7 Wed avg1 462.042254
8 Fri avg2 7.442113
9 Mon avg2 7.694648
10 Sat avg2 6.556056
11 Sun avg2 7.266571
12 Thu avg2 7.426286
13 Tue avg2 7.359577
14 Wed avg2 7.700282

我的问题是我想使用 facet_grid 创建条形图按天显示每组平均数据,但观察结果非常相似,我发现使用 scale_y_continuous 指定 y 限制很有帮助.

所以,如果我将我的 ggplot 分配给 g <- ggplot(df, aes(x=day, y=value)) ,我可以得到我想要的一半:
g + geom_bar(stat="identity") + facet_grid(variable~., scales="free")


g + geom_bar(stat="identity") + scale_y_continuous(limits=c(300,500), oob=rescale_none)

但是,我不知道如何使用分面网格,然后指定一个 scale_y_cont 来限制单独 y 轴的大小。有解决办法吗?

最佳答案

使用 geom_point 时,您可以为不同的方面创建单独的 y 范围,但我不知道如何使用 geom_bar .使用 facet_wrap 设置特定的 y 范围和 geom_bar ,我所知道的唯一方法是创建单独的图,然后使用 grid.arrange 将它们并排放置来自 gridExtra包。 (使用不会降到零的垂直比例会夸大点/条之间的差异,这可能会产生误导,但您必须决定这对您的特定情况是否有意义。)

首先,这里是 geom_point版本:这个想法是创建一个“虚拟”数据框,其中包含您想要的 ylim 上下值,然后使用 geom_blank“绘制”它们。 . geom_blank不绘制任何内容,但添加此几何图形将确保轴范围是您希望每个方面的轴范围。

ddummy = data.frame(day=NA, variable=rep(c("avg1", "avg2"), each=2), 
value=c(0.5*max(df$value[df$variable=="avg1"]),
1.1*max(df$value[df$variable=="avg1"]),
0.5*max(df$value[df$variable=="avg2"]),
1.1*max(df$value[df$variable=="avg2"])))

g <- ggplot(df, aes(x=day, y=value))

g + geom_point() +
geom_blank(data=dummy, aes(day, value)) +
facet_grid(variable ~ ., scales="free")

enter image description here

这里是单独的图,与 grid.arrange 放在一起:
avg1 = ggplot(df[df$variable=="avg1",], aes(x=day, y=value)) +
geom_bar(stat="identity") +
facet_wrap(~variable) +
coord_cartesian(ylim=c(300,500))

avg2 = ggplot(df[df$variable=="avg2",], aes(x=day, y=value)) +
geom_bar(stat="identity") +
facet_wrap(~variable) +
coord_cartesian(ylim=c(3.5,8))

gridExtra::grid.arrange(avg1, avg2, ncol=2)

enter image description here

使用 geom_segment (根据您的评论)您可以这样做:
library(dplyr)

ggplot(df %>% group_by(variable) %>%
mutate(ymin=0.5*max(value))) +
geom_segment(aes(x=day, xend=day, y=ymin, yend=value),
size=5, colour=hcl(195,100,65)) +
facet_grid(variable ~ ., scales="free")

关于r - ggplot facet 网格条形图上的不同 y 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30280499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com