如何设置包围y轴的圆面的限制?
我有这个阴谋,我需要围绕y轴,所以看起来是可以接受的除了我不想在y轴上显示1的值。 我想将“限制”添加到“scale_y_continuous”函数,以便每个方面图的限制对于各个方面都是唯一的。
这里是仅在y轴上显示60和80的情节
dat = data.frame(x = c(1,2,3,1,2,3),A=c(80.6, 82,83,60,61,62),A_up =c(81,84,85,62,63,64), A_low =c(79,78,81,59,58,57), group = c("z","z","z","y","y","y"))
ggplot(data=dat , aes(x=as.factor(x), y=A, group = 1)) + #, color =Group, group = Group
geom_line() + geom_point() + # facet_wrap(~COUNTERPARTY_STRATEGY ,ncol=2)
geom_errorbar(aes(ymax = A_up ,ymin = A_low), width = .25) +
scale_y_continuous(breaks = seq( floor( (min(dat$A_low)-11) /10)*10 ,
ceiling( (max(dat$A_up)+11) /10)*10,10 ),
labels = seq( floor( (min(dat$A_low)-11) /10)*10 ,
ceiling( (max(dat$A_up)+11) /10)*10,10 )
) +
facet_wrap(~group ,ncol=2, scales = "free_y")
现在,我在y连续的范围内添加限制,并在全局范围内应用限制。
dat = data.frame(x = c(1,2,3,1,2,3),A=c(80.6, 82,83,60,61,62),A_up =c(81,84,85,62,63,64), A_low =c(79,78,81,59,58,57), group = c("z","z","z","y","y","y"))
ggplot(data=dat , aes(x=as.factor(x), y=A, group = 1)) + #, color =Group, group = Group
geom_line() + geom_point() + # facet_wrap(~COUNTERPARTY_STRATEGY ,ncol=2)
geom_errorbar(aes(ymax = A_up ,ymin = A_low), width = .25) +
scale_y_continuous(breaks = seq( floor( (min(dat$A_low)-11) /10)*10 ,
ceiling( (max(dat$A_up)+11) /10)*10,10 ),
labels = seq( floor( (min(dat$A_low)-11) /10)*10 ,
ceiling( (max(dat$A_up)+11) /10)*10,10 ),
# limits = c( floor( min(dat$A_low[dat$group =="z"]) /10)*10 ,ceiling(max(dat$A_up[dat$group =="z"])/10)*10 )
#limits = c( floor( min(dat$A_low[dat$group =="z"]) /10)*10 ,ceiling(max(dat$A_up[dat$group =="z"])/10)*10 )
limits = c( floor( min(dat$A_low) /10)*10 ,ceiling(max(dat$A_up)/10)*10 )
) +
facet_wrap(~group ,ncol=2, scales = "free_y")
即
c( floor( min(dat$A_low) /10)*10 ,ceiling(max(dat$A_up)/10)*10 )
是50和90
但我希望每个方面情节的极限都是独一无二的
所以正确的情节会有限制
c( floor( min(dat$A_low[dat$group =="y"]) /10)*10 ,ceiling(max(dat$A_up[dat$group =="y"])/10)*10 )
50和70
左边的图会有限制
c( floor( min(dat$A_low[dat$group =="z"]) /10)*10 ,ceiling(max(dat$A_up[dat$group =="z"])/10)*10 )
70和90
如何调整限制以针对各个方面的情节?
dat = data.frame(x = c(1,2,3,1,2,3),A=c(80.6, 82,83,60,61,62),A_up =c(81,84,85,62,63,64), A_low =c(79,78,81,59,58,57), group = c("z","z","z","y","y","y"))
dat <- data.table(dat)
dat[, y_min := floor( min(A_low) /10)*10, by = group]
dat[, y_max := ceiling(max(A_up)/10)*10 , by = group]
ggplot(data=dat , aes(x=as.factor(x), y=A, group = 1)) + #, color =Group, group = Group
geom_line() + geom_point() + # facet_wrap(~COUNTERPARTY_STRATEGY ,ncol=2)
geom_errorbar(aes(ymax = A_up ,ymin = A_low), width = .25) +
scale_y_continuous(breaks = seq( floor( (min(dat$A_low)-11) /10)*10 ,
ceiling( (max(dat$A_up)+11) /10)*10,10 ),
labels = seq( floor( (min(dat$A_low)-11) /10)*10 ,
ceiling( (max(dat$A_up)+11) /10)*10,10 )
) +
facet_wrap(~group ,ncol=2, scales = "free_y") +
geom_blank(aes(y = y_min)) + geom_blank(aes(y = y_max))
所以在这里我使用data.table by = group
为每个组创建y_min
和y_max
。 然后在geom_blank
使用这些值来扩展绘图区域。
显然,这可以自动扩展到任何数量的组/方面。
一种选择是分别制作每个方面,然后将它们缝合在一起。 这还有一个额外的好处,就是你可以使用10以外的东西作为你的休息顺序(例如,如果你的一个组从100到1000,你可以使用200来代替修改)。
首先,我正在创建一个函数来计算休息时间。 (如果您需要不同范围的不同比例,您将修改此功能。)
myBreaks <- function(x){
seq(floor( (min(x) ) /10)*10 ,
ceiling( (max(x) ) /10)*10,
10 )
}
然后,使用lapply
从每个组的数据子集中绘制一个图表:
sepPlots <- lapply(levels(dat$group), function(thisGroup){
ggplot(data= dat[dat$group == thisGroup, ],
aes(x=as.factor(x), y=A, group = 1)) +
geom_line() + geom_point() +
geom_errorbar(aes(ymax = A_up ,ymin = A_low), width = .25) +
scale_y_continuous(breaks = myBreaks,
limits = range(myBreaks(dat[dat$group == thisGroup, c("A_up", "A_low")]))
) +
facet_wrap(~group)
})
请注意,我仍然使用facet_wrap
来获得剧情上方的strip
style标题,尽管如果你更喜欢那个样式,你可以使用ggtitle
。
然后,使用plot_grid
的cowplot
将所有内容拼接在一起。 请注意,如果你加载cowplot
它会设置它自己的默认主题。 要恢复,请使用theme_set(theme_gray())
cowplot::plot_grid(plotlist = sepPlots)
给
cowplot
有很好的文档记录,所以当你扩大到更多的小组时,你应该能够根据需要对情节进行调整。
我没有安装ggplot,但可能是一个简单的if () else
可以解决你的问题。 我的第一次尝试是这样的:
if {
(dat$group =="y") c( floor( min(dat$A_low[dat$group =="y"]) /10)*10, ceiling(max(dat$A_up[dat$group =="y"])/10)*10 )
else c( floor( min(dat$A_low[dat$group =="z"]) /10)*10, ceiling(max(dat$A_up[dat$group =="z"])/10)*10 )
}
链接地址: http://www.djcxy.com/p/93721.html