《R数据可视化手册》一3.9 添加数据标签

3.9 添加数据标签

问题
如何给条形图添加数据标签?

方法
在绘图命令中加上geom_text()即可为条形图添加数据标签。运行命令时,需要分别指定一个变量映射给x、y和标签本身。通过设定vjust(竖直调整数据标签位置)可以将标签位置移动至条形图顶端的上方或者下方,如图3-22所示。

library(gcookbook) # 为了使用数据

# 在条形图顶端下方
ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +
   geom_bar(stat="identity") +
   geom_text(aes(label=Weight), vjust=1.5, colour="white")

# 在条形图顶端上方
ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +
  geom_bar(stat="identity") +
  geom_text(aes(label=Weight), vjust=-0.2)

注意,当数据标签被置于条形图顶端时,它们可能会被遮挡。为了避免这个问题,可以参见8.2节的内容。

讨论
在图3-22中,数据标签的y轴坐标位于每个条形的顶端中心位置;通过设定竖直调整(vjust)可以将数据标签置于条形图顶端的上方或者下方。这种做法的不足之处在于当数据标签被置于条形图顶端上方时有可能使数据标签溢出绘图区域。为了修正这个问题,我们可以手动设定y轴的范围,也可以保持竖直调整不变,而令数据标签的y轴坐标高于条形图顶端。后一种办法的不足之处在于,当你想将数据标签完全置于条形图顶端上方或者下方的时候,竖直方向调整的幅度依赖于y轴的数据范围;而更改vjust时,数据标签离条形顶端的距离会根据条形图的高度自动进行调整。

# 将y轴上限变大
ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +
  geom_bar(stat="identity") +
  geom_text(aes(label="Weight"), vjust=-0.2) +
  ylim(0, max(cabbage_exp$Weight)*1.05)

# 设定标签的y轴位置使其略高于条形图顶端——y轴范围会自动调整
ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +
  geom_bar(stat="identity") +
  geom_text(aes(y=Weight+0.1, label=Weight))

对于簇状条形图,需要设定position=position_dodge()并给其一个参数来设定分类间距。分类间距的默认值是0.9,因为簇状条形图的条形更窄,所以,需要使用字号(size)来缩小数据标签的字体大小以匹配条形宽度。数据标签的默认字号是5,这里我们将字号设定为3使其看起来更小(见图3-23)。

ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
  geom_bar(stat="identity", position="dodge") +
  geom_text(aes(label=Weight), vjust=1.5, colour="white",
        position=position_dodge(.9), size=3)

向堆积条形图添加数据标签之前,要先对每组条形对应的数据进行累积求和。在进行本操作之前,须保证数据的合理排序,否则,可能计算出错误的累积和。我们可以用plyr包中的arrange()函数完成上述操作,plyr包是一个随ggplot2包加载的软件包。

library(plyr)
# 根据日期和性别对数据进行排序
ce <- arrange(cabbage_exp, Date, Cultivar)

确认数据合理排序之后,我们可以借助ddply()函数以Date为分组变量对数据进行分组,并分别计算每组数据对应的变量Weight的累积和。

# 计算累积和
ce <- ddply(ce, "Date", transform, label_y=cumsum(Weight))
ce

Cultivar Date Weight    sd n     se percent_weight label_y
   c39 d16  3.18 0.9566144 10 0.30250803    58.45588  3.18
   c52 d16  2.26 0.4452215 10 0.14079141    41.54412  5.44
   c39 d20  2.80 0.2788867 10 0.08819171    47.37733  2.80
   c52 d20  3.11 0.7908505 10 0.25008887    52.62267  5.91
   c39 d21  2.74 0.9834181 10 0.31098410    65.08314  2.74
   c52 d21  1.47 0.2110819 10 0.06674995    34.91686  4.21

ggplot(ce, aes(x=Date, y=Weight, fill=Cultivar)) +
  geom_bar(stat="identity") +
  geom_text(aes(y=label_y, label=Weight), vjust=1.5, colour="white")

结果如图3-24所示。

使用数据标签时,对堆叠顺序的调整最好是通过在计算累积和之前修改因子的水平顺序(参见15.8节)来完成。另一种修改堆叠顺序的方法是在标度中指定breaks参数,但在这里此方法并不合适,因为累计求和的顺序与堆叠的顺序并不一致。

如果想把数据标签置于条形中部(见图3-25),须对累计求和的结果加以调整,并同时略去geom_bar()函数中对y偏移量(offset)的设置:

ce <- arrange(cabbage_exp, Date, Cultivar)

#计算y轴的位置,将数据标签置于条形中部
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")+
  geom_text(aes(y=label_y, label=Weight), colour="White")

为了得到效果更好的条形图(见图3-26),我们修改一下图例顺序和颜色,将数据标签置于条形中间,同时通过字号参数(size)缩小标签字号,并调用paste函数在标签后面添加“kg”,为了使得标签保留两位小数我们还需调用format函数:

ggplot(ce, aes(x=Date, y=Weight, fill=Cultivar)) +
  geom_bar(stat="identity", colour="black") +
  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")

另见
更多关于控制文本格式的内容可参见9.2节。

更多关于分组转换数据的内容可参见15.6节。

时间: 2024-09-22 23:15:49

《R数据可视化手册》一3.9 添加数据标签的相关文章

《R数据可视化手册》一第3章 条形图3.1 绘制简单条形图

第3章 条形图 R数据可视化手册 条形图也许是最常用的数据可视化方法,通常用来展示不同的分类下(在x轴上)某个数值型变量的取值(在y轴上).例如,条形图可以用来形象地展示四种不同商品的价格情况,但不适宜用来展示商品价格随时间的变动趋势,因为这里时间是一个连续变量--尽管我们也可以这么做,后面会看到这种情形. 绘制条形图时需特别注意一个重要的细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身.牢记这个区别--这里极易混淆,因为两者与数据集的对应关系不同,但又对应同样的术语

《R数据可视化手册》一导读

前 言 R数据可视化手册几年前读研时我开始用R,主要用来分析我在科研工作中收集到的数据.我使用R首先是想摆脱SPSS这样的统计软件的禁锢,即严格的环境和死板的分析.更何况,R是免费的,所以我用不着说服别人为我购买一套这样的软件--这对一个穷研究生来说是相当的重要!此后,随着我对R的了解不断深入,我才发现原来R还可以绘制出非常优秀.动人的数据图形. 本书的每个"技巧"中,都列出了一个问题和对应的解决方法.在大多数情况下,我提供的并不是R中唯一的实现方法,但却是我认为的最佳方案.R如此受欢

《R数据可视化手册》——导读

前言 R数据可视化手册几年前读研时我开始用R,主要用来分析我在科研工作中收集到的数据.我使用R首先是想摆脱SPSS这样的统计软件的禁锢,即严格的环境和死板的分析.更何况,R是免费的,所以我用不着说服别人为我购买一套这样的软件--这对一个穷研究生来说是相当的重要!此后,随着我对R的了解不断深入,我才发现原来R还可以绘制出非常优秀.动人的数据图形. 本书的每个"技巧"中,都列出了一个问题和对应的解决方法.在大多数情况下,我提供的并不是R中唯一的实现方法,但却是我认为的最佳方案.R如此受欢迎

《R数据可视化手册》一第2章 快速探索数据2.1 绘制散点图

第2章 快速探索数据 R数据可视化手册虽然本书中大部分图形都是通过ggplot2包绘制的,但这并不是R绘制图形的唯一方法.要快速探索数据,有时使用R基础包中的绘图函数会很有用.这些函数随R软件默认安装,无需另行安装附加包.它们简短易输入,处理简单问题时使用方便,且运行速度极快. 如果你想绘制较为复杂的图形,那么,转用ggplot2包通常是更好的选择.部分原因在于ggplot2提供了一个统一的接口和若干选项来替代基础绘图系统中对图形的修修补补和各种特例.一旦掌握了ggplot2的工作机制,你就可以

《R数据可视化手册》一第1章 R基础1.1 安装包

第1章 R基础 R数据可视化手册本章包括以下基础知识:安装包.使用包和加载数据. 如果你想快速上手,本书大多数技巧都需要安装ggplot2和gcookbook包.运行下面命令来安装: install.packages(c("ggplot2", "gcookbook"))然后,在每个R会话中,你需要在运行本书的例子之前先加载它们: library(ggplot2)library(gcookbook)附录A提供了一个关于ggplot2绘图包的简介,主要是面向不熟悉ggp

《R数据可视化手册》——第1章 R基础

第1章 R基础 R数据可视化手册本章包括以下基础知识:安装包.使用包和加载数据. 如果你想快速上手,本书大多数技巧都需要安装ggplot2和gcookbook包.运行下面命令来安装: install.packages(c("ggplot2", "gcookbook"))``` 然后,在每个R会话中,你需要在运行本书的例子之前先加载它们: library(ggplot2)library(gcookbook)`附录A提供了一个关于ggplot2绘图包的简介,主要是面向不

《R数据可视化手册》——第2章 快速探索数据

第2章 快速探索数据 R数据可视化手册虽然本书中大部分图形都是通过ggplot2包绘制的,但这并不是R绘制图形的唯一方法.要快速探索数据,有时使用R基础包中的绘图函数会很有用.这些函数随R软件默认安装,无需另行安装附加包.它们简短易输入,处理简单问题时使用方便,且运行速度极快. 如果你想绘制较为复杂的图形,那么,转用ggplot2包通常是更好的选择.部分原因在于ggplot2提供了一个统一的接口和若干选项来替代基础绘图系统中对图形的修修补补和各种特例.一旦掌握了ggplot2的工作机制,你就可以

《R数据可视化手册》——第3章 条形图

第3章 条形图 R数据可视化手册条形图也许是最常用的数据可视化方法,通常用来展示不同的分类下(在x轴上)某个数值型变量的取值(在y轴上).例如,条形图可以用来形象地展示四种不同商品的价格情况,但不适宜用来展示商品价格随时间的变动趋势,因为这里时间是一个连续变量--尽管我们也可以这么做,后面会看到这种情形. 绘制条形图时需特别注意一个重要的细节:有时条形图的条形高度表示的是数据集中变量的频数,有时则表示变量取值本身.牢记这个区别--这里极易混淆,因为两者与数据集的对应关系不同,但又对应同样的术语.

《R数据可视化手册》——3.9 添加数据标签

3.9 添加数据标签 问题如何给条形图添加数据标签? 方法在绘图命令中加上geom_text()即可为条形图添加数据标签.运行命令时,需要分别指定一个变量映射给x.y和标签本身.通过设定vjust(竖直调整数据标签位置)可以将标签位置移动至条形图顶端的上方或者下方,如图3-22所示. library(gcookbook) # 为了使用数据 # 在条形图顶端下方 ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +