《ggplot2:数据分析与图形艺术》

第5章 工具箱

5.10 添加图形注释

添加图形注释有两种基本的方式:逐个添加或批量添加。
逐个添加的方式适合少量的、图形属性多样化的注解。我们只要为所有想要的图形属性设置好对应的值就可以了。如果我们需要添加多个具有类似属性的注解,将它们放到数据框中并一次添加完成也许更有效。
下面的例子中,我们分别用以上两种方式,向经济数据中加入了有关美国总统的信息。
> (unemp <- qplot(date, unemploy, data=economics, geom="line", ylab="No. unemployed(1000s)"))#这里的括号表示既将qplot对象赋值给unemp变量,又将图形展示出来。
R:ggplot2(12),第5章 工具箱(4)
绘制的是美国经济情况当中,失业情况随着时间的变化。
> presidential <- presidential[-(1:3),]#筛选在1970年以后执政的美国总统信息
> presidential
#A tibble: 8 x 4
name start end party
<chr> <date> <date> <chr>
1 Nixon 1969-01-20 1974-08-09 Republican
2 Ford 1974-08-09 1977-01-20 Republican
3 Carter 1977-01-20 1981-01-20 Democratic
4 Reagan 1981-01-20 1989-01-20 Republican
5 Bush 1989-01-20 1993-01-20 Republican
6 Clinton 1993-01-20 2001-01-20 Democratic
7 Bush 2001-01-20 2009-01-20 Republican
8 Obama 2009-01-20 2017-01-20 Democratic
> unemp <- qplot(date, unemploy, data=economics, geom="line", ylab="No. unemployed(1000s)")
> unemp + geom_vline(aes(xintercept=start), data=presidential)#之后进行绘图,geom_vline表示向图中加入平行于y轴的竖线,加入的数据是data=presidential,美国总统执政时间区间的数据,所要显示的是x轴的date时间xintercept表示的是x轴的数值,是presidential[[‘start’]]的值,但start的值但数据类型必须是date型。
R:ggplot2(12),第5章 工具箱(4)
> yrng <- range(economics$unemploy)#获取失业率,y轴的取值范围
> xrng <- range(economics$date)#获取失业率,x轴的取值范围
> library(scales)
> unemp <- qplot(date, unemploy, data=economics, geom="line", ylab="No. unemployed(1000s)")
> unemp + geom_rect(aes(NULL, NULL, xmin=start, xmax=end, fill=party), ymin=yrng[1], ymax=yrng[2], data=presidential, alpha=0.2) + scale_fill_manual(values=c("blue", "red"))#geom_rect函数表示强调图中但某些区域,
geom_rect()函数表示绘制2维的矩形图,要求的图形属性有colour, fill, linetype, size, xmax, xmin, ymax, ymin,所以NULL, NULL表示不设定x及y轴的值,因为函数没有必要要求,所以方便占位用两个NULL,data=presidential数据,区间是xmin=start, xmax=end,fill=party填充,party是离散型随机变量,同时y轴要给定一个范围,ymin=yrng[1], ymax=yrng[2]这两个值贯穿了图形y轴的上下最低和最高点,alpha=0.2透明度,scale_fill_manual(values=c(“blue”, “red”),蓝色是party的Democratic,红色是party的Republican。
R:ggplot2(12),第5章 工具箱(4)
> last_plot() + geom_text(aes(x=start, y=yrng[1], label=name), data=presidential, size=3, hjust=0, vjust=0)#向图中添加总统的名字,last_plot()表示上一个已经绘制好的图形。
geom_text()函数图形属性有angle, colour, hjust, label, size, vjust, x, y
geom_text()函数表示向图中添加文字,添加的文字是data=presidential数据当中的name列,添加的位置是x=start,y=yrng[1],(放置的位置是图形的底部,事实上如果是x=start,y=yrng[2],将文字放在图形的顶部可能效果更好),label信息一定要有,label=name,表示添加的文字的名称是什么,size=3, hjust=0, vjust=0文字大小为3,不做任何调整。
R:ggplot2(12),第5章 工具箱(4)
> caption <- paste(strwrap("Unemployment rates in the US have varied a lot over the years", 40), collapse="\n")#添加\n。
> caption
[1] “Unemployment rates in the US have\nvaried a lot over the years”
> unemp <- qplot(date, unemploy, data=economics, geom="line", ylab="No. unemployed(1000s)")

> highest <- subset(economics, unemploy==max(unemploy))#找到最高点
> unemp + geom_point(data=highest, size=3, colour="red", alpha=0.5)#标记处失业率最高点

geom_text可添加文字叙述或为点添加标签。对于多数图形,为所有观测都添加标签是无益都。然而(使用取子集的方式)抽取部分观测添加标签可能会非常有用,即我们希望标记处离群点或其他重要的点。
geom_vline,geom_hline:向图形中添加垂直线或水平线。
geom_abline:向图形添加任意斜率和截距的直线。
geom_rect:可强调图形中感兴趣的矩形区域。geom_rect拥有xmin,xmax,ymin和ymax几种图形属性。
geom_line,geom_path和geom_segment都可以添加直线。这三个几何对象都有一个arrow参数,可以用来在线上放置一个箭头。我们也可以使用arrow()函数绘制箭头,它拥有angel,length,ends以及type几个参数。

5.11 含权数据

在处理整合后的数据是,数据集的每一行可能代表了多种观测值,此时我们需要以某种方式把权重变量考虑进去。这里以2000年美国人口普查中,中西部各州的统计数据为例。此数据中主要包含的是比例型数据(例如白人比例、贫困线以下人口比例、有大学学历的人口比例)和每个郡的基本信息(面积、人口总数、人口密度)。
权重变量的不同将极大地影响图形内容以及观察结论。有两种可以用于表现权重的可调图形属性。
1,对于线和点这类简单的几何对象,我们可以根据点的数量调整图形属性size来改变点的大小:
> qplot(percwhite, percbelowpoverty, data= midwest)
> qplot(percwhite, percbelowpoverty, data= midwest, size=poptotal/1e6) + scale_size_area("Population\n(millions)", breaks=c(0.5, 1, 2, 4))#图形用点的大小来区分人口数,size=poptotal/1e6,表示百万人口,scale_size_area(“Population\n(millions)”,breaks=c(0.5, 1, 2, 4)表示将数值分为四个组别。图形标注中,0.5的点的大小,小于这个点是数值小于0.5,大于这个点表示数值大于0.5。
R:ggplot2(12),第5章 工具箱(4)
breaks=c(0.5, 1, 2, 4)这个方法,恰好为我们提供了连续型变量分组的,数值规划方法,选取个别的点作为基准点,然后通过breaks对连续型数据进行拆分,并且标记。
> qplot(percwhite, percbelowpoverty, data= midwest, size=area) + scale_size_area()
R:ggplot2(12),第5章 工具箱(4)
对于更复杂的、涉及到统计变换的情况,我们通过修改weight图形属性来表现权重。这些权重将被传递给统计汇总计算函数。
在权重有意义的情况下,各种元素基本都支持权重的设定,例如:
各类平滑器、分位回归、箱线图、直方图以及各类密度图。我们无法直接看到这个权重变量,而且她也没有对应的图例,但它却会改变统计汇总但结果。显示作为权重但人口密度如何影响来白种人比例和贫困线以下人口比例的关系。
> lm_smooth <- geom_smooth(method=lm, size=1)
> ggplot(midwest, aes(percwhite, percbelowpoverty))+geom_point()+lm_smooth
R:ggplot2(12),第5章 工具箱(4)
> ggplot(midwest, aes(percwhite, percbelowpoverty, weight=popdensity, size=popdensity))+geom_point()+lm_smooth#加入权重比例后,线性拟合偏重人口密度大的结果。
R:ggplot2(12),第5章 工具箱(4)
上图中,第一张图是未考虑权重的最优拟合曲线;第二张图是以人口数量作为权重的最优拟合曲线

在使用总人口作为权重去修改直方图或密度图的时候,我们的视角将从对郡数量分布的观察转向对人口数量分布的观察。
绘制一幅贫困线以下人口比例的直方图,显示了这两种视角的不同之处。
> ggplot(midwest, aes(percbelowpoverty))+geom_histogram(binwidth=1)
R:ggplot2(12),第5章 工具箱(4)
> ggplot(midwest, aes(percbelowpoverty, weight=poptotal))+geom_histogram(binwidth=1)+ylab("population")#加入权重值,一定要加在ggplot的aes当中。如果用qplot绘制qplot(percbelowpoverty, data=midwest, weight=poptotal, binwidth=1, geom="histogram")+ylab("population")
R:ggplot2(12),第5章 工具箱(4)
上面两种图中,第一张图是不含权重信息的直方图,第二张图是加入人口总数(poptotal)这个权重值的直方图。不含权重信息的直方图展示的是郡的数量,而含权重信息的直方图展示了人口数量。

相关文章:

  • 2022-12-23
  • 2021-11-10
  • 2022-12-23
  • 2021-11-01
  • 2021-09-05
猜你喜欢
  • 2021-10-24
  • 2021-07-11
  • 2021-10-22
  • 2022-12-23
  • 2021-09-29
  • 2022-02-01
  • 2021-05-18
相关资源
相似解决方案