[关闭]
@Macux 2015-12-01T06:47:43.000000Z 字数 3593 阅读 940

R语言_ggplot2_Lv2_Bar

R语言_学习笔记


玩转高级的条形图(自己梦寐以求的)


以前一直都以为条形图,只能绘制一个变量。时至今日,才恍然大悟。
The key point is "stat"。只要设置参数stat="identity",就可以画出二维的条形图。

  1. > upc <- subset(uspopchange,rank(Change)>40)
  2. > ggplot(upc,aes(Abb,Change,fill=Region)) + geom_bar(stat="identity") + scale_fill_brewer(palette="Set2")

此处输入图片的描述


  1. > ggplot(upc,aes(x=reorder(Abb,Change),y=Change,fill=Region)) + geom_bar(stat="identity") + scale_fill_brewer(palette="Pastel1") + labs(x="Abb")

此处输入图片的描述


  1. > ggplot(cabbage_exp,aes(Date,Weight,fill=Cultivar)) + geom_bar(stat="identity")

此处输入图片的描述
图例的颜色顺序和图形中的顺序居然相反,强迫症患者无法忍受。
just do it:

(1)、修改的是图例顺序---优先选择

  1. > ggplot(cabbage_exp,aes(Date,Weight,fill=Cultivar)) + geom_bar(stat="identity") + guides(fill=guide_legend(reverse=TRUE))

此处输入图片的描述

因为此处的图例是关于fill的,所以就是fill=guide_legend(reverse=TRUE);若图例是color或shape或其它,对应起来就行了~

(2)、修改的是条形图的堆叠顺序

  1. > library(plyr)
  2. > ggplot(cabbage_exp,aes(Date,Weight,fill=Cultivar,order=desc(Cultivar))) + geom_bar(stat="identity")

此处输入图片的描述


  1. > library(plyr)
  2. > ce <- ddply(cabbage_exp,"Date",transform,percent_weight=Weight/sum(Weight)*100) #对数据集cabbage_exp,以Date为分组变量,对各组数据执行transform()。
  3. > ggplot(ce,aes(Date,percent_weight,fill=Cultivar)) + geom_bar(stat="identity") + guides(fill=guide_legend(reverse=TRUE))

此处输入图片的描述


(1)、并列(dodge)的情形

  1. > ggplot(cabbage_exp,aes(Date,Weight,fill=Cultivar)) + geom_bar(stat="identity",position="dodge") + geom_text(aes(label=Weight),vjust=1.5,color="white",position=position_dodge(0.9),size=4,fontface="bold.italic")

此处输入图片的描述

(2)、堆叠(stack)的情形

  1. > library(plyr)
  2. > ji <- arrange(cabbage_exp,Date,Cultivar) #排序
  3. > ji <- ddply(ji,"Date",transform,label_y=cumsum(Weight)) #计算累积和
  4. > ggplot(ji,aes(Date,Weight,fill=Cultivar)) + geom_bar(stat="identity") + geom_text(aes(y=label_y,label=Weight),vjust=1.5,color="white") + guides(fill=guide_legend(reverse=TRUE))

此处输入图片的描述


(1)、并列(dodge)的情形

  1. > ggplot(cabbage_exp,aes(Date,Weight,fill=Cultivar)) + geom_bar(stat="identity",position="dodge") + geom_text(aes(label=paste(format(Weight,nsmall=2),"kg"),y=0.7*Weight),color="black",position=position_dodge(0.9),size=3) + scale_fill_brewer(palette="Pastel1") + ylim(0,max(cabbage_exp$Weight*1.05))

此处输入图片的描述

(2)、堆叠(stack)的情形

  1. > library(plyr)
  2. > j <- arrange(cabbage_exp,Date,Cultivar) #排序
  3. > j <- ddply(ji,"Date",transform,label_y=cumsum(Weight)-0.5*Weight)
  4. #不仅计算累积和,还计算y轴的位置,使得数据标签至于条形中部
  5. > ggplot(j,aes(Date,Weight,fill=Cultivar)) + geom_bar(stat="identity") + geom_text(aes(y=label_y,label=paste(format(Weight,nsmall=2),"kg")),color="black") + guides(fill=guide_legend(reverse=TRUE)) + scale_fill_brewer(palette="Pastel1")

此处输入图片的描述

使用paste()函数是为了给数据标签添加单位。
使用format()函数是为了让每一个数据标签都具有相同的精确度。


(1)、生肉

  1. >tophit <- tophitters2001[1:25,]
  2. > ggplot(tophit,aes(avg,name)) + geom_point()

此处输入图片的描述

(2)、用分组火柴杆图来烤

  1. > nameorder <- tophit$name[order(tophit$lg,tophit$avg)]
  2. > tophit$name <- factor(tophit$name,levels=nameorder)
  3. > ggplot(tophit,aes(avg,name)) + geom_point(size=2,aes(color=lg),shape=8) + geom_segment(aes(yend=name),xend=0,color="olivedrab3") + theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank(),panel.background=element_rect(fill="white",colour="gray50"),axis.text.y=element_text(size=12,face="bold"),axis.text.x=element_text(size=12,face="bold")) + scale_color_brewer(palette="Set1") +guides(color=guide_legend(reverse=TRUE))

此处输入图片的描述

(3)、用分面火柴杆图来烤

  1. > ggplot(tophit,aes(avg,name)) + geom_point(size=2,aes(color=lg),shape=8) + geom_segment(aes(yend=name),xend=0,color="olivedrab3") + theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank(),panel.background=element_rect(fill="white",colour="gray50"),axis.text.y=element_text(size=12,face="bold"),axis.text.x=element_text(size=12,face="bold")) + scale_color_brewer(palette="Set1") + facet_grid(lg~.,scales="free_y",space="free")

此处输入图片的描述

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注