桓峰基因的教程不但教您怎么使用,还会定期分析一些相关的文章,学会教程只是基础,但是如果把分析结果整合到文章里面才是目的,觉得我们这些教程还不错,并且您按照我们的教程分析出来不错的结果发了文章记得告知我们,并在文章中感谢一下我们哦!

公司英文名称:Kyoho Gene Technology (Beijing) Co.,Ltd.


前两期简单介绍了 R 语言基础,比较简单粗略,然后介绍了 R 语言中表格的转换,因为现在绘图基本以及舍弃了基本绘图的方式,都会选择 ggplot2 来作图,这期SCI绘图介绍一下柱状图!


前言

柱状图一般用于,当我们都有一组分类变量以及每个类别的定量值,而我们关注的主要重点是定量值的大小时。应该在柱状图背景保留横网格线,便于比较我们关注的值。

基础参数介绍

当分类label过长时,最好选择横向柱状图,避免出现旋转label,保持文字阅读方向与图形方向的统一性。

应该注意对柱状图进行排序(大小,分类变量,分布)。

基础参数

ggplot2中柱状图的基本绘制函数有两个,如下:

geom_bar() 产生的柱状图映射是经过统计变换的(count, …prop…);

geom_col()是不经过统计变换的,代表的就是该分类变量的实际值。

柱状图使用高度来表示一个值,因此必须始终显示柱状图的底部,以产生有效的视觉比较。使用柱状图转换后的刻度时要小心。始终使用有意义的参考点作为杆的底部是很重要的。例如,对于日志转换,参考点是1。事实上,当使用对数尺度时,geom_bar()会自动将杆的底置为1。

柱状图绘制

1. 软件包安装

if (!require(ggplot2)) install.packages("ggplot2")

library(ggplot2)

2. 数据读取

data(mpg)
head(mpg)
## # A tibble: 6 x 11
##   manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class 
##   <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr> 
## 1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compa~
## 2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compa~
## 3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compa~
## 4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compa~
## 5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compa~
## 6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compa~

3. 简单柱状图

以每个x在数据集中出现的总数为y轴。

# geom_bar is designed to make it easy to create bar charts that show counts
# (or sums of weights)
ggplot(mpg, aes(class)) + geom_bar() + theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_ggplot2

4. 简单柱状图排序

ggplot2中一般数据和视觉元素映射是分开的,如果需要对柱状图排序,就需要对数据进行排序处理。

library(dplyr)
library(forcats)
data_sorted <- mpg %>%
    group_by(class) %>%
    summarise(count = n()) %>%
    mutate(class = fct_reorder(class, count))

ggplot() + geom_bar(data = data_sorted, aes(x = class, y = count), stat = "identity") +
    theme_bw()

参数color控制外框颜色,fill控制填充颜色。

ggplot() + geom_bar(data = data_sorted, aes(x = class, y = count), stat = "identity",
    fill = "blue", colour = "red")+theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_SCI绘图_02

6. 水平柱状图

当数据分组标签名字过长时,有一种方法是将label旋转,这样它们就不会互相重叠。

ggplot() + geom_bar(data = data_sorted, aes(x = class, y = count), stat = "identity",
    width = 0.5, position = position_dodge(width = 0.9)) + theme(panel.grid.major.x = element_line(colour = "black"),
    panel.background = element_blank(), axis.line.y = element_blank(), axis.title.y = element_blank()) +
    coord_flip()

grafana柱状图绘制时间线 grapher怎么画柱状图_SCI绘图_03

7.堆叠柱状图

分组作图的默认position 是 position = “stack”,fill参数表示将数据映射为填充颜色,color参数表示将数据映射为外框颜色。

ggplot() + geom_bar(data = mpg, aes(x = class, fill = drv), stat = "count") + theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_grafana柱状图绘制时间线_04

利用lwd参数增加外框线宽度,然后将外框线颜色和背景色统一,就可以形成堆叠间有间隔的柱状图。

ggplot() + geom_bar(data = mpg, aes(x = class, group = drv, fill = drv), stat = "count",
    lwd = 1.5, colour = "white") + theme_classic() + theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_数据_05

8. 百分比堆叠图

比较各组中每个类别出现次数在该组中占的百分比

ggplot() + geom_bar(data = mpg, aes(x = class, fill = factor(cyl)), position = "fill") +
    theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_数据_06

比较各组中每个类别实际值在该组中占的百分比。由于数据集data中的count就是数据集mpg中每个组别的出现次数,因此图片是一样的。

data <- mpg %>%
    group_by(class, cyl) %>%
    summarise(count = n())
ggplot() + geom_bar(data = data, aes(x = class, y = count, fill = factor(cyl)), stat = "identity",
    position = "fill") + theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_数据_07

9. 并排柱状图

在aes()内部的width控制柱子的宽度,position = position_dodge()中的width控制的是一组中各柱子的间隔宽度。

ggplot() + geom_bar(data = mpg, aes(x = class, fill = factor(cyl)), position = "dodge") +
    theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_数据_08

10. 添加误差线

并排的柱状图误差线和单个的相同,但需要注意一些参数。用position_dodge() 产生的并排柱状图,需要给误差线一个分组依据,然后进行的potion调试。

data <- mpg %>%
    group_by(class, cyl) %>%
    summarise(count = n())
ggplot() + geom_col(data = data, aes(x = class, y = count, fill = factor(cyl)), position = position_dodge()) +
    geom_errorbar(data = data, aes(x = class, ymin = count - 1, ymax = count + 1,
        group = factor(cyl)), width = 0.2, position = position_dodge(0.9)) + theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_grafana柱状图绘制时间线_09

11. 金字塔图

金字塔图的核心就是找到需要分开的变量,然后以它为依据对数据进行正和负变换,然后将正负坐标轴强制设置成对应的正值。

mpg$displ <- ifelse(mpg$year == "1999", mpg$displ, -mpg$displ)

ggplot(data = mpg) + geom_col(aes(x = factor(manufacturer), y = displ, fill = factor(year))) +
    scale_y_continuous(breaks = seq(from = -100, to = 100, by = 20), labels = c(seq(100,
        0, -20), seq(20, 100, 20))) + coord_flip() + theme_bw()

grafana柱状图绘制时间线 grapher怎么画柱状图_ggplot2_10

12. 坐标轴中断

当柱状图非常高,展示时可以选择截断坐标轴,形成只有底部和上部的中断柱状图。创建y轴截断的plot,如下:

require(patchwork)

theme_1 <-  theme(axis.ticks.x = element_blank(),
                  axis.title = element_blank(),
                  panel.background = element_blank(),
                  axis.line = element_line(colour = "black"))

theme_2 <-  theme(axis.text.x = element_blank(),
                  axis.ticks.x = element_blank(),
                  axis.title = element_blank(),
                  panel.background = element_blank(),
                  axis.line = element_line(colour = "black"))

p1 <- ggplot(data = data_sorted, aes(x = class, y = count)) + 
  geom_bar(stat = "identity", position = "stack") +
  coord_cartesian(ylim = c(0,30)) + theme_1
  #设置下面一半


p2 <- ggplot(data = data_sorted, aes(x = class, y = count)) + 
  geom_bar(stat = "identity", position = "stack") +
  coord_cartesian(ylim = c(32,65)) + 
  scale_y_continuous(breaks = # 按值设置breaks
                       seq(from = 32, to = 65, by = 5)) +
  labs( title = "Broken y axis")+
  theme_2

p2 /p1

grafana柱状图绘制时间线 grapher怎么画柱状图_数据_11