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

柱状图

ggplot绘制柱状图的统计方法中默认计数,但是对于已经完成了相关统计工作的数据集来说,在绘制柱状图时必须要在图形参数中增加 stat="identity"这一参数。

簇状柱状图

簇状柱状图需要在图形参数中设置 position="dodge"使得不同变量的数据横向排列。

ggplot(newData,aes(type,value))+
      geom_bar(aes(fill=var),stat = "identity",position="dodge",width=0.8)+
      labs(title="Clustered Column Chart")

堆积柱状图

堆积柱状图需要设置的图形参数是 position="stack"使得不同变量的数据纵向堆积。

ggplot(newData,aes(type,value))+
      geom_bar(aes(fill=var),stat = "identity",position="stack",width=0.8)+
      labs(title="Stacked Column Chart")

百分比堆积柱状图

百分比堆积柱状图需要设置的图形参数是 position="fill"使得不同变量的数据转换为百分比后再纵向堆积。

ggplot(newData,aes(type,value))+
      geom_bar(aes(fill=var),stat = "identity",position="fill",width=0.8)+
      labs(title="Percentage Stacked Column Chart")

分面柱状图

在ggplot2中可使用 facet_grid()函数绘制分面柱状图。

ggplot(newData,aes(type,value))+
      geom_bar(aes(fill=var),stat = "identity",width=0.8)+
      facet_grid(var~.)+
      labs(title="Facet Grid Column Chart")

条形图

简单来说条形图就是柱形图横过来变换一下,在R中在绘制条形图时只需要添加 coord_flip()函数即可。一般来说,柱状图适用于分类较少的情况,条形图适用于分类较多且名字较长的场景下。

簇状条形图

ggplot(newData,aes(type,value))+
      geom_bar(aes(fill=var),stat = "identity",position="dodge",width=0.8)+
      labs(title="Clustered Bar Chart")+
      coord_flip()

堆积条形图

ggplot(newData,aes(type,value))+
      geom_bar(aes(fill=var),stat = "identity",position="stack",width=0.8)+
      labs(title="Stacked Bar Chart")+
      coord_flip()

百分比堆积条形图

ggplot(newData,aes(type,value))+
      geom_bar(aes(fill=var),stat = "identity",position="fill",width=0.8)+
      labs(title="Percentage Stacked Bar Chart")+
      coord_flip()

分面条形图

ggplot(newData,aes(type,value))+
      geom_bar(aes(fill=var),stat = "identity",width=0.8)+
      facet_grid(var~.)+
      labs(title="Facet Grid Bar Chart")+
      coord_flip()