R语言可视化

ggplot2应用(一)——柱形图

2021-08-08  本文已影响0人  Bio_Infor

前言

柱形图属于类别比较型图表,包括单数据系列柱状图、多数据系列柱状图、堆积柱状图和百分比堆积柱形图。柱形图一般适用于离散型变量的刻画。
使用函数:geom_bar()

数据背景:

#加载包
library(ggplot2)
#生成数据框
Cut <- c('Fair','Good','Very Good','Premium','Ideal')
Price <- c(4300,3800,3950,4700,3500)
mydata <- data.frame(Cut,Price)
#查看数据框
head(mydata)

直接绘制单数据柱状图:

ggplot(data = mydata,aes(Cut,Price))+
  geom_bar(stat = 'identity',#不做任何统计变换
           width = 0.5,#设置每个柱的宽度
           color = 'black',#设置柱的边框色
           size = 0.5,#设置柱的边框尺寸
           fill = 'red',#设置柱的填充色
           alpha = 1#设置柱填充色的透明度
           )+
  theme_classic()#设置图标主题

成图:


Rplot01.jpeg

如果我们想将图按照柱高降序来进行绘制,就需要对数据框进行排序,ggplot2默认横轴的类别型数据类型按照首字母顺序进行排列,这就需要我们在向量排序方面的知识:

#首先对Price进行降序排序,并返回index
order <- sort(mydata$Price,index.return = T,decreasing = T)
#查看order
order
$x
[1] 4700 4300 3950 3800 3500

$ix
[1] 4 1 3 2 5
#对Cut进行排序,并转换为因子,固定顺序
mydata$Cut <- factor(mydata$Cut,levels = mydata$Cut[order$ix])

再进行绘制:


Rplot02.jpeg

数据背景(某模型小鼠在给药前后某指标的变化):

mydata <- read.table(file = 'test.txt',sep = '\t',header = T)
#查看数据
mydata
  Catergory Before_drug After_drug
1    Group1        32.4       25.0
2    Group2        27.3       22.1
3    Group3        26.7       22.3
4    Group4        28.7       21.6

在进行多数据系列柱状图的绘制时,我们需要将多维的数据框转换成为二维的数据框,reshape2包中的melt函数可以实现这个功能。

library(reshape2)
mydata <- melt(mydata,id.vars = 'Catergory')
#查看mydata
  Catergory    variable value
1    Group1 Before_drug  32.4
2    Group2 Before_drug  27.3
3    Group3 Before_drug  26.7
4    Group4 Before_drug  28.7
5    Group1  After_drug  25.0
6    Group2  After_drug  22.1
7    Group3  After_drug  22.3
8    Group4  After_drug  21.6

ggplot(mydata,aes(Catergory,value))+
  geom_bar(aes(fill = variable),#对bar按照variable进行填充
           stat = 'identity',color = 'black',
           position = position_dodge(width = 0.6),#水平放置,两个bar左边界距离为0.6
           width = 0.5,size = 0.5)+
  theme_classic()

成图:


Rplot03.jpeg

数据背景:(实例数据为5个病人的组织样品中某几种细胞的数量)

mydata <- read.table(file = 'test.txt',header = T)
            Group Sample1 Sample2 Sample3 Sample4 Sample5
1          B_cell     981    1021     688     534    1156
2          T_cell     652     678     587     205     986
3 Epithelial_cell     106     187     201     186     194
4             RBC      25      29      85      65      97

首先还是将多维数据转换为二维数据:

mydata <- melt(mydata,id.vars = 'Group')

然后进行图形的绘制:

  geom_bar(aes(fill = Group),#对bar按照Group进行填充
           stat = 'identity',#在绘制堆积柱状图时必须指定此参数,否则会出现自动统计变换(求和)的情况,报错
           position = 'stack',#绘制堆积柱状图的参数
           color = 'black',width = 0.5,size = 0.5)+
  scale_fill_manual(values = c('#FF9641','#FF5B4E','#B887C3','#38C25D'))+
  #这个参数对Group映射到bar的颜色进行了精修,对每种细胞的bar的fill颜色进行了自定义
  theme_classic()

成图:

Rplot3.jpeg
在这个图的绘制过程中需要说明的是:
(1)stat = 'identity',这个参数在绘制堆积柱状图的时候必须声明,否则会自动进行统计变换,出现报错。
(2)scale_fill_manual()这个参数针对类别型变量,且颜色的指定需使用values参数指定。

当然,你可能还是觉得这个图怪怪的,主要是因为你想按照从大到小进行堆叠,实际上这就又是对数据框进行重新编排,过程如下:

mydata$Group <- factor(mydata$Group,levels = c('RBC','Epithelial_cell','T_cell','B_cell'))
#下面的命令一样:
ggplot(mydata,aes(variable,value))+
  geom_bar(aes(fill = Group),
           stat = 'identity',
           position = 'stack',
           color = 'black',width = 0.5,size = 0.5)+
  scale_fill_manual(values = c('#FF9641','#FF5B4E','#B887C3','#38C25D'))+
  theme_classic()

成图:


Rplot4.jpeg

在这里,需要对这个排序的问题进行说明一下:
在R里面,可以将数据类型分为类别型、序数型、数值型,像本例当中不同的细胞类型就属于类别型变量,这种变量是没有顺序的,所以ggplot2绘图时会根据字母顺序进行排列。而我们想自己定义顺序的话,就需要将其转变成为序数型变量,恰好因子型变量就是我们所需要的,所以我们在这里通过factor()将一个类别型的字符串向量转变成了序数型的变量。

为了更好地刻画不同变量之间的比例信息,我们可以绘制百分比堆积柱状图。(本例种同样使用上面的数据)

#查看数据
mydata
            Group Sample1 Sample2 Sample3 Sample4 Sample5
1          B_cell     981    1021     688     534    1156
2          T_cell     652     678     587     205     986
3 Epithelial_cell     106     187     201     186     194
4             RBC      25      29      85      65      97
#小tips:计算每个Sample中RBC细胞的占比
Percentage <- (as.matrix(mydata[4,2:ncol(mydata)]))/t(as.matrix(colSums(mydata[,2:ncol(mydata)])))

上面给大家介绍了一个计算每个Sample中RBC细胞占比的方法,里面用到了一个colSums()函数,表示对列进行求和,大家可以尝试理解一下。
下面展示进行百分比堆积柱状图的绘制,注意,这个图的绘制不需要我们自己求比例,上面仅仅为了展示,命令如下:

library(reshape2)
mydata <- melt(mydata,id.vars = 'Group')
mydata$Group <- factor(mydata$Group,levels = c('RBC','Epithelial_cell','T_cell','B_cell'))
ggplot(mydata,aes(variable,value))+
  geom_bar(aes(fill = Group),
           stat = 'identity',
           position = 'fill',
           color = 'black',width = 0.5,size = 0.5)+
  scale_fill_manual(values = c('#FF9641','#FF5B4E','#B887C3','#38C25D'))+
  theme_classic()

成图:

Rplot5.jpeg
请大家注意,我们在绘制堆积柱状图时,需要展示在X轴的变量是作为列名存在的,如果拿到的数据不是这样的排布,可以首先使用t()对数据框进行转置操作,得到我们想要的形式。

今天又是摸鱼的一天!

上一篇下一篇

猜你喜欢

热点阅读