设置单独的Y轴限制free_y
问题描述:
我有这样的数据设置单独的Y轴限制free_y
library(ggplot2)
dat = data.frame(x = c(1,2,1,2),
group = c("a","a","b","b"),
y = c(10,20,1000,2000))
ggplot(dat, aes(x = x, y = y)) +
geom_point() +
geom_line() +
facet_wrap(~group, ncol = 1) +
coord_cartesian(ylim = c(0, 30))
你可以看到B组没有显示出来,因为我设置Y限制0,30
。我想手动设置每个图表的个人y限制。我不想使用scales = "free_y"
,因为我需要控制每个图表中的限制。
有没有办法可以做到这一点?你能以某种方式为每个图表提供y方面的限制吗?
答
除非您想减少绘图区域(即不绘制某些点),否则在使用scales = "free_y"
时仍然可以对y极限进行“全面”控制。
你可以使用我已经给了回答您的其他问题同样的伎俩:how to set limits on rounded facet wrap y axis?
dat <- data.table(dat)
dat[,y_min := y*0.5, by = group]
dat[,y_max:= y*1.5, by = group]
ggplot(dat, aes(x = x, y = y)) +
geom_point() +
geom_line() +
facet_wrap(~group, ncol = 1, scales = "free_y") +
geom_blank(aes(y = y_min)) +
geom_blank(aes(y = y_max))
对于其他人阅读这个问题,关键是要明确每个组创建y_min
和y_max
变量。并通过geom_blank()
“绘制”它们。 (实际上没有任何绘图,但每个刻面的绘图面积根据该组的y_min
和y_max
值进行调整)。
如果由于某些原因,您想手动给出最小值和最大值(而不是规则),则没有任何操作会阻止您。但它是单调乏味:
dat[group == "a",y_min := 0]
dat[group == "a",y_max := 30]
dat[group == "b",y_min := 0]
dat[group == "b",y_max := 3000]
ggplot(dat, aes(x = x, y = y)) +
geom_point() +
geom_line() +
facet_wrap(~group, ncol = 1, scales = "free_y") +
geom_blank(aes(y = y_min)) +
geom_blank(aes(y = y_max))
您可以使用'gridExtra'软件包和单个绘图。 – mtoto
那不是我正在寻找的 – user3022875
如果您想为每个图表设置个人y限制,有什么区别。 – mtoto