我正在创建一个使用ggplot2的情节,这几乎是完美的,它看起来像这样:
但是,我想改变“浇水处理”的顺序。盒子显示 - 我希望订单是红色,黄色,蓝色,紫色,绿色。
要为我的情节创建数据框,我开始使用一个看起来像这样的数据框(注意:' Water'字母是上述颜色的缩写):
Ring CO2 Water plot_NH4.2x25
1 1 550 B 2.228750
2 1 550 P 4.945625
3 1 550 R 22.724375
4 1 550 W -0.644375
5 1 550 Y -0.770000
6 2 475 B 2.228750
7 2 475 P 4.945625
8 2 475 R 1.348750
等
我以为我可以做以下其中一项: a)将浇水处理的名称更改为A B C D或1 2 3 4,以便它们按正确顺序自动绘图 b)添加一些代码,要求ggplot按照我想要的顺序绘制它们。
但我无法弄清楚如何做到!我已经弄乱了' ifelse',但这似乎要求你做一个与数字列相关的声明,而不是另一个因素。我也试过' xlim'但我不确定如何使这个因素被绘制为颜色,而不是x轴上的主要值。
我用来创建情节的代码是:
g.Amm.2 <- ggplot(data=NH4_24March_plot, aes(x=CO2, y=plot_NH4.2x25, fill=Water)) +
stat_boxplot(geom ='errorbar', width = 0.5, position=position_dodge(0.75))+
geom_boxplot()+
theme_bw()+
theme(panel.border = element_blank(), #remove box boarder
axis.line.x = element_line(color="black", size = 0.5), #add x axis line
axis.line.y = element_line(color="black", size = 0.5), #add y axis line
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
legend.key.size = unit(1.5, 'lines'),
legend.position=c(0.9,0.8),
legend.key = element_blank(), #remove grey box from around legend
panel.grid.major = element_blank(), panel.grid.minor = element_blank())+
scale_y_continuous(expand = c(0, 0), limits = c(-5,140), breaks=seq(0,140,20))+ #change x axis to intercept y axis at 0
scale_fill_manual(values=c("skyblue2", "orchid1", "firebrick1", "seagreen3", "yellow2"),
name=" Watering treatment",
labels=c("optimal summer \noptimal autumn", "excess summer \nlimited autumn",
"excess summer \noptimal autumn","limited summer \nexcess autumn",
"optimal summer \nlimited autumn"))+
ylab(expression(Membrane~available~NH[4]^{" +"}~-N~(~mu~g~resin^{-1}~14~day^{-1})))+
xlab(expression(CO[2]~concentration~(mu~mol~mol^{-1})))
非常感谢任何想法,提前感谢: - )
答案 0 :(得分:1)
要按顺序获取颜色,请执行以下操作: 1.将水柱设置为一个因子,其级别按您希望它们出现的顺序排列。 2.在scale_fill_manual中设置值时,按照您希望它们出现的顺序设置颜色。
见下面的结果。请注意,我删除了您的标签,以便更清楚地了解哪些颜色与哪些因素水平相对应。当然,你可以重新添加它们。
myDf = data.frame(
Ring = c(1,1,1,1,1,2,2,2),
CO2 = c(550,550,550,550,550,475,475,475),
Water=c("B","P","R","W","Y","B","P","R"),
"plot_NH4.2x25" = c(2.228750,4.945625,22.724375,-0.644375,-0.770000,2.228750,4.945625,1.348750)
)
myDf$Water = factor(myDf$Water, levels = c("R","Y","B","P","W"))
ggplot(data=myDf, aes(x=CO2, y=plot_NH4.2x25, fill=Water)) +
stat_boxplot(geom ='errorbar', width = 0.5, position=position_dodge(0.75))+
geom_boxplot()+
theme_bw()+
theme(panel.border = element_blank(), #remove box boarder
axis.line.x = element_line(color="black", size = 0.5), #add x axis line
axis.line.y = element_line(color="black", size = 0.5), #add y axis line
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
legend.key.size = unit(1.5, 'lines'),
legend.position=c(0.9,0.8),
legend.key = element_blank(), #remove grey box from around legend
panel.grid.major = element_blank(), panel.grid.minor = element_blank())+
scale_y_continuous(expand = c(0, 0), limits = c(-5,140), breaks=seq(0,140,20))+ #change x axis to intercept y axis at 0
scale_fill_manual(values=c("firebrick1", "yellow2","skyblue2", "orchid1", "seagreen3"),
name=" Watering treatment")+
ylab(expression(Membrane~available~NH[4]^{" +"}~-N~(~mu~g~resin^{-1}~14~day^{-1})))+
xlab(expression(CO[2]~concentration~(mu~mol~mol^{-1})))
答案 1 :(得分:1)
跟进我的评论,以下是如何在没有图例的情况下使用facetting使Water
值更容易理解的方法。我还添加了factor
代码来设置Water
级别的顺序。另外,在绘图之前重新编写Water
的级别可能更容易,因此我也包含了执行此操作的代码。
# Fake data
set.seed(491)
NH4_24March_plot = data.frame(CO2=rep(c(550,475), each=30), Water=rep(c("A","B","C"), 20),
values=rnorm(60, 50, 10))
# Set order of Water column
NH4_24March_plot$Water = factor(NH4_24March_plot$Water, levels=c("B","A","C"))
# Recode Water values (and note that the recoded values maintain the corresponding order
# of the Water levels that we set in the previous line of code)
library(dplyr)
NH4_24March_plot$Water_recode = recode(NH4_24March_plot$Water,
"A"="optimal summer\noptimal autumn",
"B"="excess summer\nlimited autumn",
"C"="limited summer\nexcess autumn")
ggplot(NH4_24March_plot, aes(Water_recode, values, fill=Water_recode)) +
geom_boxplot(show.legend=FALSE) +
facet_grid(. ~ CO2, labeller=label_bquote(cols=CO[2]:~.(CO2)~mu*mol%.%mol^{-1})) +
scale_y_continuous(limits=c(0, max(NH4_24March_plot$values))) +
theme_bw()