准备工作
首先加载绘图过程中需要用到的包:
library(ggplot2)
library(splines)
library(dplyr)
library(tidyr)
接下来模拟一组数据用于绘图:
set.seed(2017)
data <- data.frame(
type=LETTERS[1:10],
Num =1:10,
X1 =runif(10),
X2 =runif(10),
X3 =runif(10),
stringsAsFactors=F
)
#显示数据集
data
## type Num X1 X2 X3
## 1 A 1 0.92424261 0.674331481 0.63411352
## 2 B 2 0.53717641 0.002020766 0.37986744
## 3 C 3 0.46919565 0.025093514 0.94207403
## 4 D 4 0.28862618 0.432077786 0.75499369
## 5 E 5 0.77008816 0.499391912 0.22761184
## 6 F 6 0.77276871 0.388681932 0.91466603
## 7 G 7 0.03932234 0.395375316 0.62044504
## 8 H 8 0.43490560 0.715707325 0.31910458
## 9 I 9 0.47216639 0.940999879 0.07628881
## 10 J 10 0.27383312 0.827229161 0.26083932
使用作图 ggplot2
时通常需要将数据集转换为长数据的形式,可使用以下代码进行相应的转换:
newData <- data %>% gather("var",value,-1:-2) %>%
bind_cols(data.frame(var_id=rep(1:3,each=10)))
#显示数据集
newData
## type Num var value var_id
## 1 A 1 X1 0.924242609 1
## 2 B 2 X1 0.537176413 1
## 3 C 3 X1 0.469195646 1
## 4 D 4 X1 0.288626176 1
## 5 E 5 X1 0.770088162 1
## 6 F 6 X1 0.772768713 1
## 7 G 7 X1 0.039322336 1
## 8 H 8 X1 0.434905600 1
## 9 I 9 X1 0.472166386 1
## 10 J 10 X1 0.273833123 1
## 11 A 1 X2 0.674331481 2
## 12 B 2 X2 0.002020766 2
## 13 C 3 X2 0.025093514 2
## 14 D 4 X2 0.432077786 2
## 15 E 5 X2 0.499391912 2
## 16 F 6 X2 0.388681932 2
## 17 G 7 X2 0.395375316 2
## 18 H 8 X2 0.715707325 2
## 19 I 9 X2 0.940999879 2
## 20 J 10 X2 0.827229161 2
## 21 A 1 X3 0.634113521 3
## 22 B 2 X3 0.379867441 3
## 23 C 3 X3 0.942074033 3
## 24 D 4 X3 0.754993688 3
## 25 E 5 X3 0.227611845 3
## 26 F 6 X3 0.914666027 3
## 27 G 7 X3 0.620445041 3
## 28 H 8 X3 0.319104576 3
## 29 I 9 X3 0.076288815 3
## 30 J 10 X3 0.260839318 3
折线图
在 ggplot2中,绘制折线图时自变量不能是分类变量,如果有分类变量,需要将其转换为数字,上述产生数据的代码中 Num
变量的用处便在于此。然后使用 scale_x_continuous()
即可绘制折线图。
默认折线图只需要将各个变量先用散点标记,然后连成线即可,绘图代码如下:。
ggplot(newData,aes(Num,value,colour=var))+
geom_line()+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
堆积折线图
堆积折线图需要设置的图形参数是 position="stack"
使得不同变量的数据纵向堆积,绘图代码如下:
ggplot(newData,aes(Num,value,colour=var))+
geom_line(position="stack")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
百分比堆积折线图
百分比堆积折线图需要设置的图形参数是 position="fill"
使得不同变量的数据转换为百分比后再纵向堆积,在这里需要另外设置 aes(ymax= )
。绘图代码如下:
ggplot(newData,aes(Num,value,colour=var))+
geom_line(position="fill")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
带标记点折线图
带标记点的折线图只需要在折线基础上增加散点图即可,绘图代码如下:
ggplot(newData,aes(Num,value,colour=var))+
geom_line()+
geom_point()+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
带标记点堆积折线图
同样只需要在堆积折线图基础上增加散点图即可,绘图代码如下:
ggplot(newData,aes(Num,value,colour=var))+
geom_line(position="stack")+
geom_point(position="stack")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
带标记点百分比堆积折线图
同样在百分比堆积折线图基础上添加散点图即可,绘图代码如下:
ggplot(newData,aes(Num,value,colour=var))+
geom_line(position="fill")+
geom_point(position="fill")+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])
分面折线图
在 ggplot2中可使用 facet_grid()
函数绘制分面折线图。绘图代码如下:
ggplot(newData,aes(Num,value,colour=var))+
facet_grid(var~.)+
geom_line()+
geom_point()+
scale_x_continuous(breaks = 1:10,labels = LETTERS[1:10])