R ggplot facet_在不同侧面包裹y记号
出于某种原因,我必须绘制一个大致如下的情节: 为此,我使用以下代码:R ggplot facet_在不同侧面包裹y记号,r,ggplot2,facet-wrap,R,Ggplot2,Facet Wrap,出于某种原因,我必须绘制一个大致如下的情节: 为此,我使用以下代码: library(ggplot2) library(tidyverse) set.seed(10) df<-data.frame(Meas = runif(1000,0,10), Prop1 = sample(x = LETTERS[1:3],1000,replace=TRUE), Prop2 = sample(x = letters[1:5],1000,rep
library(ggplot2)
library(tidyverse)
set.seed(10)
df<-data.frame(Meas = runif(1000,0,10),
Prop1 = sample(x = LETTERS[1:3],1000,replace=TRUE),
Prop2 = sample(x = letters[1:5],1000,replace=TRUE),
Prop3 = sample(x=c("monkey","donkey","flipper"),1000,replace=TRUE))%>%
gather(Prop,Propvalue,-Meas)
ggplot(df,aes(x = Propvalue,y=Meas))+
geom_boxplot()+
facet_wrap(~Prop,ncol=2,scales="free_y")+
coord_flip()
库(ggplot2)
图书馆(tidyverse)
种子(10)
df%
聚集(道具,道具值,-Meas)
ggplot(df,aes(x=Propvalue,y=Meas))+
geom_箱线图()+
镶嵌面包裹(~Prop,ncol=2,scales=“free\u y”)+
coord_flip()
我认为,如果右侧图表上的y形记号出现在右侧,效果会更好(对于左侧的图表,y形记号应该保持在原来的位置,但鳍状肢和驴子应该出现在右侧,以避免左右面板之间的间隙),但是我找不到一个方法来做这件事。我相信这会成功的
library(ggplot2)
library(tidyverse)
library(tidyr)
set.seed(10)
df <-data.frame(Meas = runif(1000,0,10),
Prop1 = sample(x = LETTERS[1:3],1000,replace=TRUE),
Prop2 = sample(x = letters[1:5],1000,replace=TRUE),
Prop3 = sample(x=c("monkey","donkey","flipper"),1000,replace=TRUE))%>%
gather(Prop,Propvalue,-Meas)
ggplot(df,aes(x = Propvalue,y=Meas))+
geom_boxplot()+
facet_wrap(~Prop,ncol=2,scales="free_y")+
coord_flip()
p.list = lapply(sort(unique(df$Prop)), function(i) { # i <- "Prop1"
ggplot(df[df$Prop==i,],aes(x = Propvalue, y=Meas))+
geom_boxplot()+
facet_wrap(~Prop,scales="free_y")+
coord_flip()
})
p.list[[2]] <- p.list[[2]] + scale_x_discrete(position = "top")
library(gridExtra)
do.call(grid.arrange, c(p.list, nrow=2))
库(ggplot2)
图书馆(tidyverse)
图书馆(tidyr)
种子(10)
df%
聚集(道具,道具值,-Meas)
ggplot(df,aes(x=Propvalue,y=Meas))+
geom_箱线图()+
镶嵌面包裹(~Prop,ncol=2,scales=“free\u y”)+
coord_flip()
p、 list=lappy(排序(唯一(df$Prop)),函数(i){#i这里有一个hack,它使用ggplot的秒轴
参数,它创建了一个与主轴相反的次轴&必须是它的一对一映射。我称之为hack,因为这只适用于连续轴,所以我们需要将分类Propvalue映射为数值
注意:在本例中,我假设您希望所有奇数编号的PropX facets标签位于左侧,偶数编号的PropX facets标签位于右侧。您还可以调整其他变体的选项
library(ggplot2)
library(tidyverse)
# generate data
set.seed(10)
df<-data.frame(Meas = runif(1000,0,10),
Prop1 = sample(x = LETTERS[1:3],1000,replace=TRUE),
Prop2 = sample(x=c("monkey","donkey","flipper"),1000,replace=TRUE),
Prop3 = sample(x = letters[1:5],1000,replace=TRUE))%>%
gather(Prop,Propvalue,-Meas)
# map Propvalue to integers, primary axis contents, & secondary axis contents.
df2 <- df %>%
mutate(Propvalue.int = as.integer(factor(Propvalue,
levels = df %>% select(Prop, Propvalue) %>%
arrange(Prop, Propvalue) %>% unique() %>%
select(Propvalue) %>% unlist())),
facet.column = ifelse(as.integer(str_extract(Prop, "[0-9]")) %% 2 == 0, 2, 1),
Propvalue.left = ifelse(facet.column == 1, Propvalue, ""),
Propvalue.right = ifelse(facet.column == 2, Propvalue, ""))
# create mapping table
integer2factor <- df2 %>%
select(Propvalue.int, Propvalue.left, Propvalue.right) %>%
unique() %>% arrange(Propvalue.int)
ggplot(df2,aes(x = Propvalue.int, y=Meas,
group = Propvalue.int))+
geom_boxplot() +
scale_x_continuous(breaks = integer2factor$Propvalue.int,
labels = integer2factor$Propvalue.left,
name = "Propvalue",
sec.axis = dup_axis(breaks = integer2factor$Propvalue.int,
labels = integer2factor$Propvalue.right,
name = "")) +
facet_wrap(~Prop,ncol=2,scales="free")+
coord_flip() +
theme(axis.ticks.y = element_blank())
库(ggplot2)
图书馆(tidyverse)
#生成数据
种子(10)
df%
聚集(道具,道具值,-Meas)
#将Propvalue映射到整数、主轴内容和次轴内容。
df2%
mutate(Propvalue.int=as.integer)(因子(Propvalue,
级别=df%>%选择(属性,属性值)%%>%
排列(Prop,Propvalue)%%>%unique()%%>%
选择(Propvalue)%>%unlist()),
facet.column=ifelse(作为.integer(str_extract(Prop,“[0-9]”))%%2==0,2,1),
Propvalue.left=ifelse(facet.column==1,Propvalue,“”),
Propvalue.right=ifelse(facet.column==2,Propvalue,“”)
#创建映射表
整数2因子%
选择(Propvalue.int、Propvalue.left、Propvalue.right)%>%
唯一()%>%arrange(Propvalue.int)
ggplot(df2,aes(x=Propvalue.int,y=Meas,
组=Propvalue.int)+
geom_箱线图()+
比例x连续(中断=整数2因子$Propvalue.int,
labels=integer2factor$Propvalue.left,
name=“Propvalue”,
sec.axis=dup_轴(breaks=integer2factor$Propvalue.int,
labels=integer2factor$Propvalue.right,
姓名=”))+
小平面包裹(~Prop,ncol=2,scales=“free”)+
coord_flip()+
主题(axis.ticks.y=element\u blank())
谢谢你提供的解决方案,但在我看来,这会在解决我的问题时产生新的美学问题:图形区域不相等,这对我来说是一个真正的缺点。我希望在ggplot中找到一个解决方案,以保持其中的所有优点。我理解,但是你可以传递更多的参数,例如图形的大小,以便你的审美欲望有多大。