前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言ggplot2做簇状柱形图并添加误差线的一个完整示例

R语言ggplot2做簇状柱形图并添加误差线的一个完整示例

作者头像
用户7010445
发布2021-12-13 17:36:58
2.3K0
发布2021-12-13 17:36:58
举报

本文是回答B站关注者的提问,他的问题如下

原始数据存储在一个excel文件里,这个excel文件里有三个子表格,每一个子表格的数据如下:

总的数据格式

现在的需要是做如下的图

接下来就介绍如何利用原始数据到最终的图的ggplot2的代码

首先是将3个子表格的数据整理到一张表格里

比如这里我新建了一个子表格sheet4,数据最终的格式如下(原始数据里第一列的编号是没有用的,可以直接删掉)

接下来R语言里操作

首先是读取数据

代码语言:javascript
复制
library(readxl)
df<-read_excel("prac.xlsx",
               sheet = "sheet4")
df

将宽格式转换为长格式

代码语言:javascript
复制
library(tidyverse)
df %>% 
  pivot_longer(!var4) -> new_df
new_df

定义误差线函数

这里用到的是标准误

代码语言:javascript
复制
ebtop<-function(x){
  return(mean(x)+sd(x)/sqrt(length(x)))
}
ebbottom<-function(x){
  return(mean(x)-sd(x)/sqrt(length(x)))
}

ggplot2作图

代码语言:javascript
复制
library(ggplot2)

ggplot(data=new_df,aes(x=name,y=value,fill=var4))+
  stat_summary(geom = "bar",fun = "mean",
               position = position_dodge(0.9))+
  stat_summary(geom = "errorbar",
               fun.min = ebbottom,
               fun.max = ebtop,
               position = position_dodge(0.9),
               width=0.2)+
  scale_y_continuous(expand = expansion(mult = c(0,0.1)))+
  theme_bw()+
  theme(panel.grid = element_blank())+
  scale_fill_manual(values = c("#e20612","#ffd401","#00b0eb"),
                    name="")+
  labs(x="XXXXX",y="YYYYY")

调整不同分组之间的顺序

代码语言:javascript
复制
new_df$name<-factor(new_df$name,
                    levels = c("var2","var3","var1"))

ggplot(data=new_df,aes(x=name,y=value,fill=var4))+
  stat_summary(geom = "bar",fun = "mean",
               position = position_dodge(0.9))+
  stat_summary(geom = "errorbar",
               fun.min = ebbottom,
               fun.max = ebtop,
               position = position_dodge(0.9),
               width=0.2)+
  scale_y_continuous(expand = expansion(mult = c(0,0.1)))+
  theme_bw()+
  theme(panel.grid = element_blank())+
  scale_fill_manual(values = c("#e20612","#ffd401","#00b0eb"),
                    name="")+
  labs(x="XXXXX",y="YYYYY")

调整组内柱子之间的顺序

代码语言:javascript
复制
new_df$var4<-factor(new_df$var4,
                    levels = c("group2",
                               "group3",
                               "group1"))
ggplot(data=new_df,aes(x=name,y=value,fill=var4))+
  stat_summary(geom = "bar",fun = "mean",
               position = position_dodge(0.9))+
  stat_summary(geom = "errorbar",
               fun.min = ebbottom,
               fun.max = ebtop,
               position = position_dodge(0.9),
               width=0.2)+
  scale_y_continuous(expand = expansion(mult = c(0,0.1)))+
  theme_bw()+
  theme(panel.grid = element_blank())+
  scale_fill_manual(values = c("#e20612","#ffd401","#00b0eb"),
                    name="")+
  labs(x="XXXXX",y="YYYYY")

这里新学到一个知识点是,柱子默认是不贴底的,如果要贴底使用函数scale_y_continuous(expand = expansion(mult = c(0,0.1)))

mult对应的两个值一个是控制下面,一个是控制上面,贴底就设置为0 就可以了

还有一个知识点是 expand.grid(x=c(1,2,3),y=c(4,5,6)) 可以生成两两配对的数据

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

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文是回答B站关注者的提问,他的问题如下
  • 首先是将3个子表格的数据整理到一张表格里
  • 首先是读取数据
  • 将宽格式转换为长格式
  • 定义误差线函数
  • ggplot2作图
  • 调整不同分组之间的顺序
  • 调整组内柱子之间的顺序
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档