我使用此代码制作箱图:
Fecundity <- read.csv('Fecundity.csv')
FecundityPlot <- ggplot(Fecundity, aes(x=Group, Sex, y=Fecundity)) +
geom_boxplot(fill = fill, color = line) +
scale_y_continuous(name = "Fecundity") +
#scale_y_continuous(name = "Fecundity", breaks = seq(0, 80, 10), limits=c(0, 80)) +
ggtitle("Fecundity") +
theme(plot.title = element_text(hjust = 0.5))+
theme_bw(base_size = 11)
我的数据如下:
ID Group Sex Generation Fecundity Strain
ORR-100-M-01 OR-R-100 M 1 0 ORR
ORR-100-M-02 OR-R-100 M 1 0 ORR
ORR-100-M-03 OR-R-100 M 1 0 ORR
JW-100-M-01 JW-100 M 1 13 JW
JW-100-M-02 JW-100 M 1 0 JW
JW-100-M-03 JW-100 M 1 114 JW
我想制作一个带有ggplot2的boxplot,每个Group和Sex都有一个条形图。因此,对于OR-R100 F旁边的Group = OR-R100 Sex = M,Y轴上会有Fecundity。
此外,如何以所需顺序手动订购盒子,以便我有OR-R-20,OR-R-40等?
答案 0 :(得分:2)
您可以在aes()
内向任何geom_boxplot()
(颜色,填充,Alpha等)添加性别,ggplot会自动拆分每组中的女性和男性,并躲避箱图,并显示图例与性。
FecundityPlot <- ggplot(Fecundity, aes(x=Group, Sex, y=Fecundity)) +
geom_boxplot(aes(fill = Sex))
或者,如果你想在y轴上放置所有标签,另一种方法是制作一个新的列连接组和性别,然后使用它作为x变量绘图
Fecundity$new.group <- paste(Fecundity$Group, Fecundity Sex)
FecundityPlot <- ggplot(Fecundity, aes(x=new.group, Sex, y=Fecundity)) +
geom_boxplot()
要为组设置自定义顺序,您需要将Group设为一个因子并定义级别。在factor()
中定义级别的顺序将覆盖按字母顺序排列的默认值。
Fecundity$Group <- factor(Fecundity$Group,
levels = c("OR-R-20", "OR-R-40", "JW-100"))
答案 1 :(得分:0)
这是一种方式(使用dplyr/tidyverse
管道):
Fecundity %>%
mutate(Group_sex = paste(Group, Sex)) %>%
ggplot(aes(x = Group_sex, y = Fecundity)) +
geom_boxplot()
在stringsAsFactors = FALSE
来电中使用read.csv
,或者更好的是,使用read_csv
中较快的tidyverse
。
要为条形设置顺序,您可以在第一次变异后使用mutate(Group_sex = factor(Group_sex, levels = c( ... ))) %>%
行,并在...
中提供明确的顺序(如果不同组合的数量很小)。