如何使用 R 对 geom_histogram 中的堆叠值进行分组?
How to group stacked values in geom_histogram using R?
我在 R 中使用 geom_histogram 使用代码生成直方图:
ggGender <- ggplot(dfGenderGrouped, aes(log(freq), fill=dfGenderGrouped$name) ) +
geom_histogram(data=dfGenderGrouped, binwidth = 1, alpha=0.5, color="black") + theme_bw() +
theme(axis.title = element_text(size=16), legend.text = element_text(size=12), axis.text.y = element_text(size=12, angle=45), axis.text.x = element_text(size=12), legend.position=c(0.8,0.7)) + ylab("Number of patients") +
xlab("Events (log)")+labs(fill="Events") + scale_y_continuous(labels = comma) +
scale_fill_brewer(palette="Spectral")
dfGenderGrouped 数据框如下所示:
patid freq name Group
1 1156 1 Male - All events All
2 1194 1 Male - All events All
3 1299 1 Male - All events All
4 1445 1 Male - All events All
5 1476 2 Male - All events All
6 2045 2 Male - All events All
name 的唯一值显示在图例中。 Group 的唯一值是:
> unique(dfGenderGrouped$Group)
[1] "All" "Clinical" "Referral" "Therapy"
我想按 Group 值组织堆栈,例如,在 bin 0 中,您有一个堆叠列 Female - All events 和 男性 - 所有事件 然后是 binn 1 中的相同堆叠列等。为了进一步说明,我想 女性 - 临床事件 和男性 - 临床事件 作为单个堆积柱也跨箱。因此,堆叠值的每一列都具有 Group 共同值(全部、临床、转诊和治疗)。
进一步说明,bin 0 将具有以下列堆栈(由 data.frame 中的 Group 组织):
Female - All events & Male - All events
Female - Clinical events & Male - Clinical events
Female - Referral events & Male - Referral events
Female - Therapy events & Male - Therapy events
然后对于 bin 1 相同:
Female - All events & Male - All events
Female - Clinical events & Male - Clinical events
Female - Referral events & Male - Referral events
Female - Therapy events & Male - Therapy events
非常感谢您的帮助。
如何使用“Group` 列对图表进行分面处理,例如:
library(ggplot2)
ggplot(data = df, aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
facet_wrap(.~Group,nrow = 1, scales = "fixed")+
labs(x = "Events (log)", y = "Number of patients", fill="Events") +
scale_fill_brewer(palette="Spectral")
编辑:简化图例
为了简化图例,您可以使用 facet_wrap
绘制男性和女性,您需要编辑 "Name" 列以删除字符串的所有正确部分并仅保留男/女教派
df$Name <- sub("-.*","",df$Name))
ggplot(data = df, aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
facet_wrap(.~Group,nrow = 1, scales = "fixed")+
labs(x = "Events (log)", y = "Number of patients", fill="Events") +
scale_fill_brewer(palette="Spectral")
替代使用grid.arrange
或者,您可以使用 gridExtra
包中的 grid.arrange
函数创建 4 个绘图并将它们排列在一个图形上。这样,每个情节都有一个图例:
library(gridExtra)
ALL <- ggplot(data = subset(df, Group == "ALL"), aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
labs(x = "Events (log)", y = "Number of patients", fill="Events", title = "ALL") +
scale_fill_brewer(palette="Spectral")+
scale_x_continuous(limits = c(4,9), breaks = 4:9)+
theme_bw()+
theme(legend.position=c(0.3,0.7),
legend.text = element_text(size=8),
legend.title = element_text(size = 8))
Clin <- ggplot(data = subset(df, Group == "Clin"), aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
labs(x = "Events (log)", y = "Number of patients", fill="Events", title = "Clinical") +
scale_fill_brewer(palette="Spectral")+
scale_x_continuous(limits = c(4,9), breaks = 4:9)+
theme_bw()+
theme(legend.position=c(0.3,0.7),
legend.text = element_text(size=8),
legend.title = element_text(size = 8))
Ref <- ggplot(data = subset(df, Group == "Ref"), aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
labs(x = "Events (log)", y = "Number of patients", fill="Events", title = "Ref") +
scale_fill_brewer(palette="Spectral")+
scale_x_continuous(limits = c(4,9), breaks = 4:9)+
theme_bw()+
theme(legend.position=c(0.3,0.7),
legend.text = element_text(size=8),
legend.title = element_text(size = 8))
Ther <- ggplot(data = subset(df, Group == "Ther"), aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
labs(x = "Events (log)", y = "Number of patients", fill="Events", title = "Ther") +
scale_fill_brewer(palette="Spectral")+
scale_x_continuous(limits = c(4,9), breaks = 4:9)+
theme_bw()+
theme(legend.position=c(0.3,0.7),
legend.text = element_text(size=8),
legend.title = element_text(size = 8))
grid.arrange(nrow = 1, ALL, Clin, Ref, Ther)
它看起来像你想要达到的目标吗?如果不是,你能澄清一下你的问题吗?
注意:请查看我的代码以了解如何正确制作 ggplot2
图表,例如,一旦您使用 data =
声明了数据框,您就不再需要 $设计列名。
可重现的例子:
df <- data.frame(Group = rep(c("ALL","Clin","Ref","Ther"),each = 50),
Name = rep(rep(c("M","F"), each = 25),4),
Freq = sample(1:10000,200, replace = TRUE),
Patient = sample(1000:5000,200,replace = TRUE))
df$Name = paste(df$Name,df$Group,sep = " - ")
我在 R 中使用 geom_histogram 使用代码生成直方图:
ggGender <- ggplot(dfGenderGrouped, aes(log(freq), fill=dfGenderGrouped$name) ) +
geom_histogram(data=dfGenderGrouped, binwidth = 1, alpha=0.5, color="black") + theme_bw() +
theme(axis.title = element_text(size=16), legend.text = element_text(size=12), axis.text.y = element_text(size=12, angle=45), axis.text.x = element_text(size=12), legend.position=c(0.8,0.7)) + ylab("Number of patients") +
xlab("Events (log)")+labs(fill="Events") + scale_y_continuous(labels = comma) +
scale_fill_brewer(palette="Spectral")
dfGenderGrouped 数据框如下所示:
patid freq name Group
1 1156 1 Male - All events All
2 1194 1 Male - All events All
3 1299 1 Male - All events All
4 1445 1 Male - All events All
5 1476 2 Male - All events All
6 2045 2 Male - All events All
name 的唯一值显示在图例中。 Group 的唯一值是:
> unique(dfGenderGrouped$Group)
[1] "All" "Clinical" "Referral" "Therapy"
我想按 Group 值组织堆栈,例如,在 bin 0 中,您有一个堆叠列 Female - All events 和 男性 - 所有事件 然后是 binn 1 中的相同堆叠列等。为了进一步说明,我想 女性 - 临床事件 和男性 - 临床事件 作为单个堆积柱也跨箱。因此,堆叠值的每一列都具有 Group 共同值(全部、临床、转诊和治疗)。
进一步说明,bin 0 将具有以下列堆栈(由 data.frame 中的 Group 组织):
Female - All events & Male - All events
Female - Clinical events & Male - Clinical events
Female - Referral events & Male - Referral events
Female - Therapy events & Male - Therapy events
然后对于 bin 1 相同:
Female - All events & Male - All events
Female - Clinical events & Male - Clinical events
Female - Referral events & Male - Referral events
Female - Therapy events & Male - Therapy events
非常感谢您的帮助。
如何使用“Group` 列对图表进行分面处理,例如:
library(ggplot2)
ggplot(data = df, aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
facet_wrap(.~Group,nrow = 1, scales = "fixed")+
labs(x = "Events (log)", y = "Number of patients", fill="Events") +
scale_fill_brewer(palette="Spectral")
编辑:简化图例
为了简化图例,您可以使用 facet_wrap
绘制男性和女性,您需要编辑 "Name" 列以删除字符串的所有正确部分并仅保留男/女教派
df$Name <- sub("-.*","",df$Name))
ggplot(data = df, aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
facet_wrap(.~Group,nrow = 1, scales = "fixed")+
labs(x = "Events (log)", y = "Number of patients", fill="Events") +
scale_fill_brewer(palette="Spectral")
替代使用grid.arrange
或者,您可以使用 gridExtra
包中的 grid.arrange
函数创建 4 个绘图并将它们排列在一个图形上。这样,每个情节都有一个图例:
library(gridExtra)
ALL <- ggplot(data = subset(df, Group == "ALL"), aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
labs(x = "Events (log)", y = "Number of patients", fill="Events", title = "ALL") +
scale_fill_brewer(palette="Spectral")+
scale_x_continuous(limits = c(4,9), breaks = 4:9)+
theme_bw()+
theme(legend.position=c(0.3,0.7),
legend.text = element_text(size=8),
legend.title = element_text(size = 8))
Clin <- ggplot(data = subset(df, Group == "Clin"), aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
labs(x = "Events (log)", y = "Number of patients", fill="Events", title = "Clinical") +
scale_fill_brewer(palette="Spectral")+
scale_x_continuous(limits = c(4,9), breaks = 4:9)+
theme_bw()+
theme(legend.position=c(0.3,0.7),
legend.text = element_text(size=8),
legend.title = element_text(size = 8))
Ref <- ggplot(data = subset(df, Group == "Ref"), aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
labs(x = "Events (log)", y = "Number of patients", fill="Events", title = "Ref") +
scale_fill_brewer(palette="Spectral")+
scale_x_continuous(limits = c(4,9), breaks = 4:9)+
theme_bw()+
theme(legend.position=c(0.3,0.7),
legend.text = element_text(size=8),
legend.title = element_text(size = 8))
Ther <- ggplot(data = subset(df, Group == "Ther"), aes(log(Freq), fill = Name))+
geom_histogram(binwidth = 1, alpha = 0.5,color = "black")+
labs(x = "Events (log)", y = "Number of patients", fill="Events", title = "Ther") +
scale_fill_brewer(palette="Spectral")+
scale_x_continuous(limits = c(4,9), breaks = 4:9)+
theme_bw()+
theme(legend.position=c(0.3,0.7),
legend.text = element_text(size=8),
legend.title = element_text(size = 8))
grid.arrange(nrow = 1, ALL, Clin, Ref, Ther)
它看起来像你想要达到的目标吗?如果不是,你能澄清一下你的问题吗?
注意:请查看我的代码以了解如何正确制作 ggplot2
图表,例如,一旦您使用 data =
声明了数据框,您就不再需要 $设计列名。
可重现的例子:
df <- data.frame(Group = rep(c("ALL","Clin","Ref","Ther"),each = 50),
Name = rep(rep(c("M","F"), each = 25),4),
Freq = sample(1:10000,200, replace = TRUE),
Patient = sample(1000:5000,200,replace = TRUE))
df$Name = paste(df$Name,df$Group,sep = " - ")