多数据柱形图用于比较一个类别或多个类别,在不同数值状态下的表现。需要根据数据类型的不同做一些数据处理工作包括数据合并数据排序。
知识点:sort()、melt()
数据展示
本次所使用的数据如下:
mydata<-read.csv("MultiColumn_Data.csv",check.names=FALSE)
数据处理
现在我们按照数据的年份,将数据变为新的三列,分别为类别列:Catergory、年份列:year、值列:value。
首先对需要得到的数据简单规划一下,年份列放在第二列降序排列,所以需要用到sort函树,并将decreaseing设置为TRUE,
处理代码如下:
order<-sort(mydata$ "1996",index.return=TRUE,decreasing = TRUE) #根据“1996” 排序
mydata$Catergory<- factor(mydata$Catergory, levels = mydata$Catergory[order$ix])
#根据“1996”的排序结果设定因子向量的水平顺序
mydata<-melt(mydata,id.vars='Catergory')
names(mydata) <- c('Catergory','year','value')#更名
在sort函数中index.return是个逻辑值,设置是否显示排序序列对应的元素值在未排序前序列中的对应位置索引,默认为False。因为我们需要他的一个索引值所以设置为TRUE.
第二行中,我们需要改变一下类别列的值,因为按年份分列原先的三行数据会因为两个年份均有对应会变为六行。factor函数可以将数据转化为因子型方便分类和排序,需要将第一行代码得到的索引值作为序号。
第三行代码使用melt函数对数据进行合并,其中id.var函数为不进行合并的列,其他两列会被合并成新的列,一列为纯年份,一列为值。
最后使用names函数改一下列名即可。
更改后数据样式如下:
绘图
绘图的主体代码与单数据类型相似(详情可以参考上一篇文章:单数据柱形图)。
ggplot(data=mydata,aes(Catergory,value,fill=year)) +
geom_bar(stat="identity", color="black", position=position_dodge(),width=0.7,size=0.25)+
scale_color_npg()+
scale_fill_npg()
结果如下:
其中position=position_dodge()可以将柱子分成左右两个,如果不设置的话就是下面的堆叠形式。
(如果大家有关于论文数据图的各种疑问欢迎私信讨论qicong0719)。