ggplot2绘图系列之(二)

折线图

Posted by 207统计工作室 on July 21, 2017

准备工作

首先加载绘图过程中需要用到的包:

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])