@Macux
2015-12-01T06:47:43.000000Z
字数 3593
阅读 940
R语言_学习笔记
以前一直都以为条形图,只能绘制一个变量。时至今日,才恍然大悟。
The key point is "stat"。只要设置参数stat="identity",就可以画出二维的条形图。
> upc <- subset(uspopchange,rank(Change)>40)
> ggplot(upc,aes(Abb,Change,fill=Region)) + geom_bar(stat="identity") + scale_fill_brewer(palette="Set2")
> ggplot(upc,aes(x=reorder(Abb,Change),y=Change,fill=Region)) + geom_bar(stat="identity") + scale_fill_brewer(palette="Pastel1") + labs(x="Abb")
> ggplot(cabbage_exp,aes(Date,Weight,fill=Cultivar)) + geom_bar(stat="identity")
图例的颜色顺序和图形中的顺序居然相反,强迫症患者无法忍受。
just do it:
(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)、修改的是条形图的堆叠顺序
> library(plyr)
> ggplot(cabbage_exp,aes(Date,Weight,fill=Cultivar,order=desc(Cultivar))) + geom_bar(stat="identity")
> library(plyr)
> ce <- ddply(cabbage_exp,"Date",transform,percent_weight=Weight/sum(Weight)*100) #对数据集cabbage_exp,以Date为分组变量,对各组数据执行transform()。
> ggplot(ce,aes(Date,percent_weight,fill=Cultivar)) + geom_bar(stat="identity") + guides(fill=guide_legend(reverse=TRUE))
(1)、并列(dodge)的情形
> 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)的情形
> library(plyr)
> ji <- arrange(cabbage_exp,Date,Cultivar) #排序
> ji <- ddply(ji,"Date",transform,label_y=cumsum(Weight)) #计算累积和
> 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)的情形
> 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)的情形
> library(plyr)
> j <- arrange(cabbage_exp,Date,Cultivar) #排序
> j <- ddply(ji,"Date",transform,label_y=cumsum(Weight)-0.5*Weight)
#不仅计算累积和,还计算y轴的位置,使得数据标签至于条形中部
> 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)、生肉
>tophit <- tophitters2001[1:25,]
> ggplot(tophit,aes(avg,name)) + geom_point()
(2)、用分组火柴杆图来烤
> nameorder <- tophit$name[order(tophit$lg,tophit$avg)]
> tophit$name <- factor(tophit$name,levels=nameorder)
> 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)、用分面火柴杆图来烤
> 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")