用 ggplot2 在 R 中画图,能够画出非常漂亮的统计图,由于 ggplot2 的作者 Hadley Wickham 在开发 ggplot2 的时候借鉴了 Photoshop 的图层的思想,使得利用ggplot2来画图,非常方便的维护和修改,画出来的图只需要修改每个图层的数值就行了,而不需求全面修改。
Hadley Wickham 在 R 社区可是一个大神级别的人物,一个 ggplot2 包可以说让 R 火的不行,什么还不知道 Hadley Wickham 长什么样?没关系戳我你就认识他了。
学习 ggplot2 可不是一件太容易的事情,就这个 package 的书就有 200 页,先学习下折线图,不过各种图原理都差不多,记录下画折线图的流程,方便下次再画类似的图。
1.数据准备
- 准备好一个
data.frame
格式的数据 - 画一个物种随着月份出现概率的折现统计
library(ggplot2)
set.seed("123")
month <- c(1,2,3,4,1,2,3,4)
count <- runif(8)
species <- c('A','A','A','A','B','B','B','B')
mydata <- data.frame(month,count,species )
- 生成的mydata数据如下
month count species
1 1 0.28757752012 A
2 2 0.78830513544 A
3 3 0.40897692181 A
4 4 0.88301740400 A
5 1 0.94046728429 B
6 2 0.04555649939 B
7 3 0.52810548805 B
8 4 0.89241904439 B
2. 生成折线图
p <- ggplot(mydata,aes(x=month,y=count,colour=species,group=species,fill=species)) +
geom_line(size =0.8)
p
3.各种添加和修改
添加圆点符号—加图层 geom_point()
p <- ggplot(mydata,aes(x=month,y=count,colour=species,group=species,fill=species)) +
geom_line(size =0.8)+
geom_point(size=1.5)
p
添加各点的数值—加图层 geom_text()
p <- ggplot(mydata,aes(x=month,y=count,colour=species,group=species,fill=species)) +
geom_line(size =0.8)+
geom_point(size=1.5)+
geom_text(aes(label = count, vjust = 1.1, hjust = 0.5, angle = 0), show.legend = FALSE)
p
修改x轴坐标点的名字—加图层 geom_x_continuous()
p <- ggplot(mydata,aes(x=month,y=count,colour=species,group=species,fill=species)) +
geom_line(size =0.8)+
geom_point(size=1.5)+
geom_text(aes(label = count, vjust = 1.1, hjust = 0.5, angle = 0), show.legend = FALSE)+
scale_x_continuous(breaks=c(1,2,3,4), labels=c("January", "February", "March", "April"))
p
修改坐标轴的标签和添加标题—加图层 labs(x = , y = , title = )
- 或者
xlab()
+ylab()
+ggtitle()
p <- ggplot(mydata,aes(x=month,y=count,colour=species,group=species,fill=species)) +
geom_line(size =0.8)+
geom_point(size=1.5)+
geom_text(aes(label = count, vjust = 1.1, hjust = 0.5, angle = 0), show.legend = FALSE)+
scale_x_continuous(breaks=c(1,2,3,4), labels=c("January", "February", "March", "April"))+
labs( x = 'Data', y = 'probability',title = 'Sample1')
p