如何在 ggplot 中使用 facet 将 2 个类别与整个类别进行比较
How to compare 2 categories to the whole categories using facet in ggplot
Hi 想使用 facet_grid 或 facet_wrap 或 ggplot 中的其他函数将两个类别与整个类别进行比较。例如,我想将医院 3 和 4 的统计数据与整个医院进行比较。
Hospital<-c("Hosp1","Hosp1","Hosp1","Hosp1","Hosp1",
"Hosp2","Hosp2","Hosp2","Hosp2","Hosp2",
"Hosp3","Hosp3","Hosp3","Hosp3","Hosp3",
"Hosp4","Hosp4","Hosp4","Hosp4","Hosp4")
Disease<-c("D1","D1","D2","D2","D3",
"D1","D1","D1","D3","D3",
"D3","D3","D2","D2","D3",
"D1","D1","D2","D2","D2")
data<-data.frame(Hospital,Disease)
plot<-ggplot(data, aes(x=Disease,fill=Disease))+
geom_bar()+facet_grid(~Hospital)+coord_flip()
使用facet_grid,我有一个比较四家医院的图表,我不想要。
我宁愿在不经过“grid.arrange”的情况下使用这样的分面,因为我想显示所有图表的所有疾病类别(即使它们为空)(以便于比较)和我不希望每个图表都显示 x.axis 标签,因为它需要很多 space
wh<-ggplot(data, aes(x=Disease,fill=Disease))+
geom_bar()+coord_flip()+labs(title = "whole hospital")
H3<-ggplot(data[data$Hospital=="Hosp3",], aes(x=Disease,
fill=Disease))+ geom_bar()+coord_flip()+
labs(title = "hospital3")
H4<-ggplot(data[data$Hospital=="Hosp4",], aes(x=Disease,
fill=Disease))+ geom_bar()+coord_flip()+
labs(title = "hospital4")
grid.arrange(wh,H3,H4,ncol=3)
如果您的数据不是太大,一种方法是将数据框绑定在一起,添加另一列来指示数据集(或医院),然后用小平面绘制:
library(dplyr)
library(ggplot2)
rbind(data,subset(data,Hospital == "Hosp3"),subset(data,Hospital == "Hosp4")) %>%
mutate(hospital=rep(c("whole hospital","Hosp3","Hosp4"),
c(nrow(data),sum(data$Hospital == "Hosp3"),sum(data$Hospital == "Hosp4")))
) %>%
mutate(hospital=factor(hospital,levels=c("whole hospital","Hosp3","Hosp4"))) %>%
ggplot(aes(x=Disease,fill=Disease))+ geom_bar()+coord_flip()+
facet_wrap(~hospital,scale="free_y")
根据gghighlight
这个怎么样
library(ggplot2)
library(dplyr)
data_all <-
data %>%
mutate(Hospital = "Hosp_all") %>%
group_by(Disease) %>%
summarise(total = n())
data %>%
filter(Hospital %in% c("Hosp3", "Hosp4")) %>%
ggplot(aes(x = Disease, fill = Disease))+
geom_col(data = data_all, aes(Disease, total), fill = "gray80")+
geom_bar()+
coord_flip()+
facet_wrap(~Hospital)+
theme(legend.position = "bottom")
由 reprex package (v0.3.0)
于 2020-06-23 创建
Hi 想使用 facet_grid 或 facet_wrap 或 ggplot 中的其他函数将两个类别与整个类别进行比较。例如,我想将医院 3 和 4 的统计数据与整个医院进行比较。
Hospital<-c("Hosp1","Hosp1","Hosp1","Hosp1","Hosp1",
"Hosp2","Hosp2","Hosp2","Hosp2","Hosp2",
"Hosp3","Hosp3","Hosp3","Hosp3","Hosp3",
"Hosp4","Hosp4","Hosp4","Hosp4","Hosp4")
Disease<-c("D1","D1","D2","D2","D3",
"D1","D1","D1","D3","D3",
"D3","D3","D2","D2","D3",
"D1","D1","D2","D2","D2")
data<-data.frame(Hospital,Disease)
plot<-ggplot(data, aes(x=Disease,fill=Disease))+
geom_bar()+facet_grid(~Hospital)+coord_flip()
使用facet_grid,我有一个比较四家医院的图表,我不想要。
我宁愿在不经过“grid.arrange”的情况下使用这样的分面,因为我想显示所有图表的所有疾病类别(即使它们为空)(以便于比较)和我不希望每个图表都显示 x.axis 标签,因为它需要很多 space
wh<-ggplot(data, aes(x=Disease,fill=Disease))+
geom_bar()+coord_flip()+labs(title = "whole hospital")
H3<-ggplot(data[data$Hospital=="Hosp3",], aes(x=Disease,
fill=Disease))+ geom_bar()+coord_flip()+
labs(title = "hospital3")
H4<-ggplot(data[data$Hospital=="Hosp4",], aes(x=Disease,
fill=Disease))+ geom_bar()+coord_flip()+
labs(title = "hospital4")
grid.arrange(wh,H3,H4,ncol=3)
如果您的数据不是太大,一种方法是将数据框绑定在一起,添加另一列来指示数据集(或医院),然后用小平面绘制:
library(dplyr)
library(ggplot2)
rbind(data,subset(data,Hospital == "Hosp3"),subset(data,Hospital == "Hosp4")) %>%
mutate(hospital=rep(c("whole hospital","Hosp3","Hosp4"),
c(nrow(data),sum(data$Hospital == "Hosp3"),sum(data$Hospital == "Hosp4")))
) %>%
mutate(hospital=factor(hospital,levels=c("whole hospital","Hosp3","Hosp4"))) %>%
ggplot(aes(x=Disease,fill=Disease))+ geom_bar()+coord_flip()+
facet_wrap(~hospital,scale="free_y")
根据gghighlight
library(ggplot2)
library(dplyr)
data_all <-
data %>%
mutate(Hospital = "Hosp_all") %>%
group_by(Disease) %>%
summarise(total = n())
data %>%
filter(Hospital %in% c("Hosp3", "Hosp4")) %>%
ggplot(aes(x = Disease, fill = Disease))+
geom_col(data = data_all, aes(Disease, total), fill = "gray80")+
geom_bar()+
coord_flip()+
facet_wrap(~Hospital)+
theme(legend.position = "bottom")
由 reprex package (v0.3.0)
于 2020-06-23 创建