前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot barplot and error bars

ggplot barplot and error bars

作者头像
火星娃统计
发布2020-09-15 15:41:34
1.4K0
发布2020-09-15 15:41:34
举报
文章被收录于专栏:火星娃统计火星娃统计

ggplot barplot and error bars

sunqi
2020/8/3

barplot

主要的函数和参数

geom_col() 绘图函数

color, fill, width: same as above

代码

代码语言:javascript
复制
rm(list = ls())
build_data <- function(){
  df <- data.frame(dose=c("D0.5", "D1", "D2"),
                  len=c(4.2, 10, 29.5))
  df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
                  dose=rep(c("D0.5", "D1", "D2"),2),
                  len=c(6.8, 15, 33, 4.2, 10, 29.5))
  dataset <- list(df=df,df2=df2)
  return(dataset)
}


dataset <- build_data()


library(ggplot2)
library(tidyverse)
library(patchwork)
theme_set(
  theme_classic() +
    theme(legend.position = "top")
  )

# 基本绘图单元
p <- dataset$df %>% ggplot(aes(x = dose, y = len))

# 简单的绘图
p + geom_col()
代码语言:javascript
复制
# 填充颜色和在头部添加标签
# 使用geom_text
p1 <- p + geom_col(fill = "#0073C2FF") +
  geom_text(aes(label = len), vjust = -0.3)
# 在条图内部添加标签
p2 <- p + geom_col(fill = "#0073C2FF")+
  geom_text(aes(label = len), vjust = 1.6, color = "white")

p1+p2
代码语言:javascript
复制
# 按照组改变bar的颜色
p3 <- p + geom_col(aes(color = dose), fill = "white") +
  # 自定义填充颜色
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))

# 按组改变bar的填充颜色
p4 <- p+ geom_col(aes(fill = dose)) +
  # 自定义填充颜色
  scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))
p3+p4
代码语言:javascript
复制
# 堆叠条形图

p5 <- dataset$df2 %>% ggplot(aes(x = dose, y = len)) +
  # 使用position参数设置堆叠
  geom_col(aes(color = supp, fill = supp), position = position_stack()) +
  # 自定义配色
  scale_color_manual(values = c("#0073C2FF", "#EFC000FF"))+
  scale_fill_manual(values = c("#0073C2FF", "#EFC000FF"))

# 使用 position = position_dodge()
# 这里分组的柱状图被改为相邻的图
p6 <- dataset$df2 %>% ggplot(aes(x = dose, y = len)) +
  geom_col(aes(color = supp, fill = supp), position = position_dodge(0.8), width = 0.7) +
  scale_color_manual(values = c("#0073C2FF", "#EFC000FF"))+
  scale_fill_manual(values = c("#0073C2FF", "#EFC000FF"))
p6+p5
代码语言:javascript
复制
# 添加标签
p5 + geom_text(
  # lebel为len,
  aes(label = len, group = supp),
  # 位置需要与p5的位置0.8保持一致,这样才能一一对应
  position = position_dodge(0.8),
  vjust = -0.3, size = 3.5
)

error bar

主要的函数

geom_crossbar() 空心的bar

geom_errorbar() 误差bar

geom_errorbarh() 水平误差bar

geom_linerange() 垂直区间

geom_pointrange()中间有一点的误差bar

代码

代码语言:javascript
复制
rm(list = ls())

#需要的包
library(tidyverse)
library(ggplot2)
library(patchwork)


# 准备数据
get_data <- function() {
  dataset <- ToothGrowth
  dataset$dose <- as.factor(dataset$dose)
  dataset_summary <- dataset %>%
    # 分组
    group_by(dose) %>%
    #计算需要的均值和标准差
    summarise(sd = sd(len, na.rm = TRUE),
              len = mean(len))
  return(dataset_summary)
}
dataset_summary <- get_data()

# 绘图
## 基础绘图单元
p <- dataset_summary %>% ggplot(aes(
  x = dose,
  y = len,
  ymin = len - sd,
  ymax = len + sd
))

# 中间有点的垂直线
p + geom_pointrange()
代码语言:javascript
复制
# 标准差线段
p + geom_errorbar(width = 0.2) +
  geom_point(size = 1.5)
代码语言:javascript
复制
# 水平误差线
# 这里的使用的x来计算最大值和最小值
# 同时x和y互换
dataset_summary %>% ggplot(aes(
  x = len,
  y = dose,
  xmin = len - sd,
  xmax = len + sd
)) +
  geom_point() +
  geom_errorbarh(height = .2)
代码语言:javascript
复制
# 和点图合并
# 需要注意的是这两部分使用的是不同的数据集
dataset <- ToothGrowth
dataset$dose <- as.factor(dataset$dose)
p1 <- dataset %>% ggplot(aes(dose, len)) +
  geom_jitter(position = position_jitter(0.2), color = "darkgray") +
  # 这里将最大值和最小值的计算放在这里
  geom_pointrange(aes(ymin = len - sd, ymax = len + sd), data = dataset_summary)


# 和小提琴图合并
p2 <- ggplot(dataset, aes(dose, len)) +
  geom_violin(color = "darkgray", trim = FALSE) +
  geom_pointrange(aes(ymin = len - sd, ymax = len + sd), data = dataset_summary)

# 和线图、条图合并
p3 <- dataset_summary %>% ggplot(aes(dose, len)) +
  # 线的绘制,这里需要制定只有一个组
  geom_line(aes(group = 1)) +
  # 误差bar绘制
  geom_errorbar(aes(ymin = len - sd, ymax = len + sd), width = 0.2) +
  # 点图
  geom_point(size = 2)

# 条图
p4 <- dataset_summary %>% ggplot(aes(dose, len)) +
  # 条图
  geom_col(fill = "lightgray", color = "black") +
  # 添加线
  geom_errorbar(aes(ymin = len, ymax = len + sd), width = 0.2)

p1 + p2 + p3 + p4

结束语

关于这个误差bar的添加,主要的问题其实是计算的问题,需要max和min,如果存在分组的问题,那么就需要使用按照分组再计算max和min,然后再在aes中使用。 love&peace

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ggplot barplot and error bars
    • barplot
      • 主要的函数和参数
      • 代码
    • error bar
      • 主要的函数
      • 代码
    • 结束语
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档