条形图简介

数据可视化中,最常用的图非条形图莫属,它主要用来展示不同分类(横轴)下某个数值型变量(纵轴)的取值。其中有两点要重点注意:

1. 条形图横轴上的数据是离散而非连续的。比如想展示两商品的价格随时间变化的走势,则不能用条形图,因为时间变量是连续的;

2. 有时条形图的值表示数值本身,但也有时是表示数据集中的频数,不要引起混淆;

绘制基本条形图

本例选用测试数据集如下:

绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴。然后调用条形图函数geom_bar(stat="identity")便可绘制出基本条形图。其中stat="identity"表明取用样本点对应纵轴值,R语言实现代码如下:

# 基函数:aes绑定条形图横轴纵轴
ggplot(pg_mean, aes(x = group, y = weight)) +
# 条形图函数:stat表明取用样本点对应纵轴值
geom_bar(stat = "identity")

运行效果:

如果觉得灰色调比较难看,可以在条形图函数中指定条形图需要填充的颜色以及条形图的边框颜色。R语言实现代码如下:

# 基函数
ggplot(pg_mean, aes(x = group, y = weight)) +
# 条形图函数:fill设置条形图填充色,colour设置条形图边界颜色
geom_bar(stat = "identity", fill = "lightblue", colour = "black")

运行效果:

要强调的是如果横轴对应数据非离散型,则须先将其转为因子类型,否则结果会出现"空条"。

绘制(簇状)条形图

本例选用测试集如下:

绘制方法是在条形图函数中设置fill参数,将数据集中表示分类的列赋值给它。R语言实现代码如下:

# 基函数:fill绑定"美学特征"
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) +
# 条形图函数:position设置条形图类型为簇状
geom_bar(position = "dodge", stat = "identity")

运行效果:

可使用填充标尺函数scale_fill_brewer(palette)重新选择配色,并为条状加上黑色边框。R语言实现代码如下:

# 基函数
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) +
# 条形图函数
geom_bar(position = "dodge", stat = "identity", colour = "black") +
# 调色标尺:设置调色板为Pastel1
scale_fill_brewer(palette="Pastel1")

运行效果:

绘制频数条形图

选用测试数据集如下:

本例需要展示的是不同cut类型变量的样本个数,要实现这点关键在于将stat参数设置为bin。之前将stat设置为identity是直接展示样本点绑定的纵轴值,而设置为bin则会统计样本点落到横轴上各离散值的个数,这种情况下ggplot的aes参数只需绑定横轴。R语言实现代码如下:

# 基函数
ggplot(diamonds, aes(x = cut)) +
# 条形图函数:stat参数默认为bin
geom_bar(fill = "lightblue", colour = "black")

执行效果:

如果横轴是连续变量,那么这张图就会变成直方图。和将来要讲的geom_histogram()函数效果是一样的。

对正负条形图分别着色

本例测试数据集如下:

如若现在需要绘制出数据集中Anomaly10y列随时间的变化,同时可视化方面要求做到小于0的用蓝色表示,大于0的用红色表示。

对于这种情况可为数据集创建一个辅助列pos,该列为布尔类型:TRUE表示Anomaly10y属性大于0,而FALSE表示Anomaly10y列小于0。之后原数据集便多了一个pos列,表征Anomaly10y列值大于等于/小于0。然后将这个字段fiil到ggplot函数,再调用标尺函数对配色进行自定义并令guide=FALSE取消图例。R语言实现代码如下:

# 增加辅助列,表示当前记录Anomaly10y值大于/小于0。
csub$pos = csub$Anomaly10y >= 0 # 基函数
ggplot(csub, aes(x = Year, y = Anomaly10y, fill = pos)) +
# 条形图函数:position设置为"identity"是为了避免系统因绘制负值条形而引发的警告
geom_bar(stat = "identity", position = "identity", colour = "black", size = 0.1) +
# 手动调色标尺:大于0为红,小于0为蓝
scale_fill_manual(values = c("#CCEEFF", "#FFDDDD"), guide = FALSE)

运行效果:

绘制(百分比)堆积型条形图

本例测试数据集如下:

使用ggplot2绘制条形图时,只要不修改geom_bar()函数的position参数,所得条形图便为堆积型。但堆积条形图纵轴大都采用百分比形式,故在具体绘制前,需要对原数据集进行预处理,将纵轴数据转换为分类百分比格式。

本例要统计c39和c52两个品种在不同日期下的重量对比,则需首先将各记录的Weight值除以该记录所在类目的Weight和,然后再将新的百分比列绑定到纵轴。R语言实现代码如下:

# 计算Weight列的分类百分比列
library(plyr)
ce = ddply(cabbage_exp, "Date", transform, percent_weight = Weight / sum(Weight) * 100) # 基函数
ggplot(ce, aes(x = Date, y = percent_weight, fill = Cultivar)) +
# 条形图函数:未将position参数显示设置为dodge,则绘制出的条形图为堆积型
geom_bar(stat = "identity", colour = "black") +
# 调色标尺
scale_fill_brewer(palette = "Pastel1")

运行效果:

添加数据标签

本例测试数据集如下:

为了给条形图添加标签显示纵轴值,关键在于gemo_text()函数。使用这个函数时,需要在它的aes参数里绑定各样本的横纵坐标,以及要展示的值。

下面首先来展示不同Cultivar分类在不同日期下Weight的对比簇状条形图。R语言实现代码如下:

# 基函数
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) +
# 条形图函数
geom_bar(stat = "identity", position = "dodge") +
# 标签函数:label设置展示标签,vjust设置标签偏移(正上负下),position设置各标签的间距
geom_text(aes(label = Weight), vjust = 1.5, colour = "white", position = position_dodge(.9), size = 5)

运行结果:

特别要注意的是geom_text()函数的position参数,绘制簇状图必须通过该参数指定各标签的间距。否则一个簇的所有标签都会堆到同一横轴坐标上,像下面这样:

如果要在堆积状的条形图上打标签,则稍微复杂一点。因为要对每组数据进行求和及居中化处理,才能更好的展示出结果。其中关键点在于使用ggplot库提供的ddply方法对分组变量进行汇总求和。具体R语言实现代码如下:

# 根据日期和性别对数据进行排序
ce = arrange(cabbage_exp, Date, Cultivar)
# 对不同Date分组内的数据进行累加求和
ce = ddply(ce, "Date", transform, label_y = cumsum(Weight) - 0.5*Weight) # 基函数
ggplot(ce, aes(x = Date, y = Weight, fill = Cultivar)) +
# 条形图函数
geom_bar(stat = "identity", colour = "black") +
# 标签函数:paste和format方法对标签进行格式化
geom_text(aes(y=label_y, label = paste(format(Weight, nsmall=2), "kg")), size = 4) +
# 图例函数:反转图例
guides(fill = guide_legend(reverse = TRUE)) +
# 调色标尺
scale_fill_brewer(palette = "Pastel1")

运行结果:

第三篇:R语言数据可视化之条形图的更多相关文章

  1. 最棒的7种R语言数据可视化

    最棒的7种R语言数据可视化 随着数据量不断增加,抛开可视化技术讲故事是不可能的.数据可视化是一门将数字转化为有用知识的艺术. R语言编程提供一套建立可视化和展现数据的内置函数和库,让你学习这门艺术.在 ...

  2. 第四篇:R语言数据可视化之折线图、堆积图、堆积面积图

    折线图简介 折线图通常用来对两个连续变量的依存关系进行可视化,其中横轴很多时候是时间轴. 但横轴也不一定是连续型变量,可以是有序的离散型变量. 绘制基本折线图 本例选用如下测试数据集: 绘制方法是首先 ...

  3. 第一篇:R语言数据可视化概述(基于ggplot2)

    前言 ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念.当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理. 本文主要对ggplot2的可视化理念及开发 ...

  4. 第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

    数据分布图简介 中医上讲看病四诊法为:望闻问切.而数据分析师分析数据的过程也有点相似,我们需要望:看看数据长什么样:闻:仔细分析数据是否合理:问:针对前两步工作搜集到的问题与业务方交流:切:结合业务方 ...

  5. 第五篇:R语言数据可视化之散点图

    散点图简介 散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本. 同时散点图中常常还会拟合一些直线,以用来表示某些模型. 绘制基本散点图 本例选用如下测试数据集: 绘制 ...

  6. 第二篇:R语言数据可视化之数据塑形技术

    前言 绘制统计图形时,半数以上的时间会花在调用绘图命令之前的数据塑型操作上.因为在把数据送进绘图函数前,还得将数据框转换为适当格式才行. 本文将给出使用R语言进行数据塑型的一些基本的技巧,更多技术细节 ...

  7. 吴裕雄--天生自然 R语言数据可视化绘图(3)

    par(ask=TRUE) opar <- par(no.readonly=TRUE) # record current settings # Listing 11.1 - A scatter ...

  8. 吴裕雄--天生自然 R语言数据可视化绘图(4)

    par(ask=TRUE) # Basic scatterplot library(ggplot2) ggplot(data=mtcars, aes(x=wt, y=mpg)) + geom_poin ...

  9. 吴裕雄--天生自然 R语言数据可视化绘图(2)

    par(ask=TRUE) opar <- par(no.readonly=TRUE) # save original parameter settings library(vcd) count ...

随机推荐

  1. 知识备忘phpcms 简单解析一 数据表字段

    PHPCMS V9帮助中心 数据结构 phpcms v9 数据... phpcms v9 数据... PHPSSO 数据库结... phpcms v9 数据表结构 在线版 PHPCMS V9 数据结构 ...

  2. 常用排序算法集合-C实现

    之前熟悉C的时候写着玩的,就当做笔记用吧: #include<stdio.h> #include<stdlib.h> #include<string.h> #inc ...

  3. fragment 学习

    fragment需要id是必须属性 <fragment        android:id="@+id/frg1"        android:name="com ...

  4. 转:aptitude 命令详解

    原文:http://www.isspy.com/aptitude-%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3/ aptitude aptitude 是 Debian GN ...

  5. 工作总结:检查字符串合法性(C++)

    BOOL CLiftCtrlModbusConfigDlg::CheckValid(const CString &str) { ASSERT(str.GetLength() > ); ] ...

  6. 转 一些shell经验

    http://www.cnblogs.com/xublogs/archive/2010/03/16/2292254.html http://www.cnblogs.com/stephen-liu74/ ...

  7. [BestCoder Round#26] Apple 【组合数学】

    题目链接:HDOJ - 5160 题目分析 第一眼看上去,要求统计所有不同排列对答案的贡献.嗯...完全没有想法. 但是,如果我们对每个数字单独考虑,计算这个数字在总答案中的贡献,就容易多了. 对于一 ...

  8. XSHELL和XFTP,亲兄弟啊。

    XSHELL在LINUX和WINDOWS之间传输文件时不力啊.又对FTP不灵活的时候,XFTP就可以出场了. 只要登陆进XSHELL就可以操作了.并且XFTP客户端和命令行可以灵活配置选择. 然后,玩 ...

  9. 具有 Button 风格的 Panel(覆盖TCustomPanel的Paint函数,用到了ThemeServices)

    unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  10. 【Linux】鸟哥的Linux私房菜基础学习篇整理(二)

    1. dumpe2fs [-bh] devicename:查询superblock信息.参数:-b:列出保留为坏道的部分:-h:列出superblock的数据,不会列出其他的区段内容. 2. df [ ...