栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > R语言

R语言ggplot2分组条形图

R语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

R语言ggplot2分组条形图

目录
    • 1. 基本分组条形图
    • 2. 使柱子并排放置
    • 3. 改变条形图配色
    • 4. 使纵坐标呈现百分比
    • 5. 删掉图例名称

1. 基本分组条形图

假设我们有如下数据,其大致结构如图。

dat = data.frame(专业=rep(c('统计','计算机'),each = 2),
                    语言 = rep(c('R','Python'),2),
                    比例 = c(0.8,0.2,0.1,0.9))


现在想以专业为横坐标,比例为纵坐标,语言为组别(区分颜色),来绘制条形图。最基本的条形图格式如下:

library(ggplot2)
ggplot(dat,aes(x = 专业,y = 比例))+
  geom_bar(stat = 'identity',aes(fill = 语言))


这幅图存在的硬伤为:中文没有显示(可以参考这篇文章),通过改变字体来解决问题。
其他影响美观的问题有:

  1. 柱子太宽了(可以通过在geom_bar函数里设置width参数解决);
  2. 灰色背景和白色线条我不喜欢;
  3. 横纵坐标的数字太小了看不清楚。

对如上三个问题,可以参考这篇文章的详细阐述,也可以直接参考下面代码如法炮制:

ggplot(dat2,aes(x = 专业,y = 比例))+
  geom_bar(stat = 'identity',aes(fill = 语言),width = 0.9) +
  theme(text=element_text(family="Songti SC",size=12,face = "bold"), #设置文字的字体字号(设置字体是为了确保汉字可以显示,字号和加粗请随意)
        axis.text.x = element_text(size=10))       # 设置X轴文字大小

2. 使柱子并排放置

我觉得两种颜色的柱子叠在一起不够直观,于是将柱子并排放置。这是通过改变geom_bar函数中的position参数实现的。

ggplot(dat,aes(x = 专业,y = 比例))+
  geom_bar(stat = 'identity',aes(fill = 语言),position = position_dodge(0.9)) +#使柱子并排放置
  theme_bw()+ 
  theme(text=element_text(family="Songti SC",size=12,face = "bold"), #设置文字的字体字号(确保汉字可以显示)
        axis.text.x = element_text(size=10))# 设置X轴文字大小

3. 改变条形图配色

ggplot2的红配绿不得我心,希望自己换个颜色。这里面我们使用了scale_fill_manual函数。
【注1】:请注意这个函数的名称,fill指填充色(相对应的有color指边框/线条色),manual指手动设置。掌握了这种命名规则后,我们也可以在其他ggplot2绘图中,用scale_color_manual函数来改变默认的线条颜色。
【注2】:这里设置颜色时用到了十六进制颜色码,比如"#FBD84A"。如果图片没有明确颜色要求,当然可以直接设置’red’'gray’等等有名字的颜色;但是如果我们需要特定没有名字的颜色,可以直接使用十六进制颜色码。关于如何获取十六进制颜色码,可以参考获取图片的十六进制颜色码(keynote/ppt取色器)。

ggplot(dat2,aes(x = 专业,y = 比例))+
  geom_bar(stat = 'identity',
  aes(fill = 语言),
  position = position_dodge(0.9)) +#使柱子并排放置
  theme_bw()+ 
  theme(text=element_text(family="Songti SC",size=12,face = "bold"), #设置文字的字体字号(确保汉字可以显示)
        axis.text.x = element_text(size=10)) +      # 设置X轴文字大小
  scale_fill_manual(values=c("#FBD84A","#666666"))  # 设置填充颜色

4. 使纵坐标呈现百分比

纵坐标的比例值,按照default是直接呈现小数的。为了使其直接表示比例,可以安装scales包并加入scale_y_continuous(labels=percent)

library(scales)
ggplot(dat,aes(x = 专业,y = 比例))+
  geom_bar(stat = 'identity',aes(fill = 语言),position = position_dodge(0.9)) +#使柱子并排放置
  theme_bw()+ 
  theme(text=element_text(family="Songti SC",size=12,face = "bold"), #设置文字的字体字号(确保汉字可以显示)
        axis.text.x = element_text(size=10)) +      # 设置X轴文字大小
  scale_fill_manual(values=c("#FBD84A","#666666"))+ # 设置填充颜色
  scale_y_continuous(labels=percent) # 使纵坐标呈现百分比


【注】:如果有更好的方法欢迎讨论!

5. 删掉图例名称

最后just for fun,我们可以删掉图例的名称。请看最后一行代码。(应该还有其他方法,比如在theme中直接设置blank之类的,但是我记不住了。欢迎补充!)

library(scales)
ggplot(dat,aes(x = 专业,y = 比例))+
  geom_bar(stat = 'identity',aes(fill = 语言),position = position_dodge(0.9)) +#使柱子并排放置
  theme_bw()+ 
  theme(text=element_text(family="Songti SC",size=12,face = "bold"), #设置文字的字体字号(确保汉字可以显示)
        axis.text.x = element_text(size=10)) +      # 设置X轴文字大小
  scale_fill_manual(values=c("#FBD84A","#666666"))+ # 设置填充颜色
  scale_y_continuous(labels=percent) + # 使纵坐标呈现百分比
  guides(fill = guide_legend(title = NULL)) # 删掉图例名称

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号