如何解决在 ggplot2 中使用 facet_grid() 时如何定义常见的 y 轴限制
我在这里的第三篇文章。我在 ggplot2
和 facet_grid()
中使用线条和区域引导情节设计。该代码运行良好。这是我使用的数据:
#My data
df <- structure(list(Var = structure(c(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L,11L,12L,1L,12L),.Label = c("1","2","3","4","5","6","7","8","9","10","11","12"),class = c("ordered","factor")),Val = c(46.0233614780009,85.6471698498353,83.8100037071854,98.6977939726785,94.0682111307979,92.1834012959152,79.1579962009564,62.9422475816682,2.36891501117498,25.3718703053892,87.2779565863311,32.0944497128949,444.363995105959,337.84707041923,93.2718054391444,171.342949266545,81.6757546272129,135.7353850035,286.496924120001,450.293861329556,339.913251576945,80.7274857070297,122.17661133036,370.043645612895),Group = c("Up","Up","Down","Down")),row.names = c(NA,-24L),class = "data.frame")
现在这是我的情节:
library(ggplot2)
library(dplyr)
#Code for the plot
df %>%
mutate(Val=ifelse(Group=='Down',-Val,Val),Group=factor(Group,levels = c('Up','Down'),ordered = T)) %>%
ggplot(aes(x=Var,y=Val,color=Group,fill=Group,group=Group))+
geom_line(size=1)+geom_area(alpha=0.75)+
facet_grid(Group~.,scales = 'free')+
scale_y_continuous(labels = function(x) abs(x),expand = c(0,0.1))+
scale_fill_manual(values=c('cyan','tomato'))+
scale_color_manual(values=c('cyan','tomato'))+
theme_bw()
生下这个孩子:
直到这里一切都很好。我想是否可以修改两个元素:
scale_y_continuous(labels = function(x) abs(x),0.1),limits = c(NA,800))
一切都变了:
如果可能的话,我希望两个 y 轴都具有相同的比例,从 0 到 800,但要考虑幅度。在这种情况下,upper 将从 0 到 800,从 0 到 -800,但根据标签进行屏蔽以具有镜像效果。
非常感谢您的帮助。
解决方法
对于旧的“隐形点”技巧来说,这看起来是一个理想的工作,可以在您想要的地方设置构面限制:
library(ggplot2)
library(dplyr)
df %>%
mutate(Val = ifelse(Group == 'Down',-Val,Val),Group = factor(Group,levels = c('Up','Down'),ordered = TRUE)) %>%
ggplot(aes(Var,Val,color = Group,fill = Group,group = Group)) +
geom_line(size = 1) +
geom_area(alpha = 0.75) +
geom_point(data = data.frame(Group = factor(c("Down","Up"),c('Up','Down')),Var = c(1,1),Val = c(-800,800)),alpha = 0) +
facet_grid(Group~.,scales = 'free') +
scale_y_continuous(labels = function(x) abs(x),expand = c(0,0.1)) +
scale_fill_manual(values = c('cyan','tomato')) +
scale_color_manual(values = c('cyan','tomato')) +
theme_bw() +
theme(panel.spacing = unit(0,"points"))
不过,公平地指出您在这里并不真正需要分面,并且通过执行以下操作可以获得非常相似的效果:
df %>%
mutate(Val = ifelse(Group == 'Down',group = Group)) +
geom_line(size = 1) +
geom_area(alpha = 0.75) +
geom_hline(yintercept = 0) +
scale_y_continuous(labels = function(x) abs(x),0.1),limits = c(-800,800)) +
scale_fill_manual(values = c('cyan',"points"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。