我有一个具有这种结构的数据框:
> str(pd)
'data.frame': 144 obs. of 3 variables:
$ Site : Factor w/ 12 levels "BED","BEU","EB",..: 8 9 10 3 11 1 6 7 5 4 ...
$ Month : Factor w/ 12 levels "Dec","Jan","Feb",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Density: int 20 20 20 20 20 20 20 20 20 20 ...
我希望在实际使用ggplot2进行绘图之前,在不更改原始数据集的情况下,将Month
的12个级别的名称从Dec, Jan, Feb, ..., Nov
更改为D, J, F, ..., N
。
我尝试使用mapvalues()
包中的plyr
,如下所示:
pd$Month2 <- mapvalues(pd$Month ,
from = c("Dec","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov"),
to = c("D","J","F","M","A","M","J","J","A","S","O","N"))
虽然我可以替换等级,但是通过组合以相同字母开头的月份,将12个等级减少到仅为8。
> head(pd$Month2)
[1] D D D D D D
Levels: D J F M A S O N
> str(pd$Month2)
Factor w/ 8 levels "D","J","F","M",..: 1 1 1 1 1 1 1 1 1 1 ...
当我在ggplot2中绘制这个时,正如预期的那样我只能绘制8个级别,这在这种情况下是错误的
ggplot(pd,aes(x=Month2,y=Density,fill=Site))+
geom_bar(stat="identity",position="dodge", fill= "darkgray")+
xlab("Month")+ylab("Number of Individuals")+
facet_wrap(~Site,nrow=3)
月份,如1月,6月和7月,以相同的字母J开头,只在J下合并一次。
如何分别绘制所有重复的字母?