基于R的ggplot2使用指南整理(二)——分组求和折线图画法(含代码)

欢迎来到 ggplot2 第二期使用指南

不好意思让大家久等了! 时隔多日,继上一篇文章的 ggplot2 的大致用法,折线图、柱状图画法和一些代码结构的相应讲解之后,在 R 语言平台上的可视化教学又更新了!
这一期,我们会着重讲解折线图和面积图的画法。在上一期列举了所有代码结构的前提下,本期会着重介绍实例应用,并附上代码讲解。如果有不足的地方,欢迎大家提出建议!

折线图

简单介绍

还记得上一期介绍的 geom 函数列表吗,在 ggplot2 对应的代码行中,柱状图对应的是geom_bar,而折线图对应的函数是 geom_line;
geom_bar 柱状图
geom_line 线

基本结构如下:

ggplot (data = <DATA> ) +
geom_line() 
#此为必须结构

+ <COORDINATE_FUNCTION> 
+ <FACET_FUNCTION> 
+ <SCALE_FUNCTION>
+ <THEME_FUNCTION>
#此为非必须结构

值得注意的是,对于 ggplot2 中的折线图而言,横坐标 x 有连续型和离散型之分。对于连续型变量,代码结构中无需做过多声明,折线图会自动画出,而对于离散型变量,代码中需要声明此变量为离散型,并把它向量化。简单来说,因为折线图是一种连续性表示图,对于数值型的横坐标,这种图表示自然而方便,但对于向量型的横坐标,折线只是把一个个数值相连而已,所以需要一些更多的说明。

数据集

下面我们会继续使用上一节运用到的数据组 COVID-19 Activity,以下为下载链接

数据集:COVID-19 Activity.csv
下载链接:https://data.world/covid-19-data-resource-hub/covid-19-case-counts

实例

在 COVID-19 Activity 这组数据中,大家可以看到,数据的采集是以条为单位,各列会有一定重复性,所以首先,我们需要对原数据进行整理清洗。
这一次,我们依旧准备作出和上一期相同的,根据各州统计出美国患有 COVID-19 的人数。
在 ggplot2 中,对于绘制柱状图而言,sum 函数会根据 x 变量的不同而进行自动统计,所以无需做过多的分组求和工作。但对于 geom_line 来说,这一功能并不适用,所以让我们先用 tapply 对各个州的人数进行统计。

tapply 的函数用法结构如下:

tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)
Arguments

其具体含义为:对 X 变量 (大多为离散型) 进行以 INDEX 为分类的 FUN 运算。这个功能类似于 SQL 中 的groupby,这样解释读者是不是更容易理解了。

完成 tapply 分组求和之后,我们需要把数据重新组合到一个新的数据集当中,主要运用 data.framesort(unique()) 函数,目的是为了给折线图新建一个干净的数据环境。

当然这只是众多分组求和中较为简便的一种方式,感兴趣的同学可以尝试了解 aggregate 等基于R语言的分组函数,这一期将不会做更多的介绍。

完整代码如下:

library(ggplot2)
setwd("Desktop/doc/ggplot2")

data <- read.csv("COVID-19 Activity.csv")
data$Month <- substring(data$REPORT_DATE, 1, 1)

#sort data
geom_line_data <- data.frame(
	Province = sort(unique(data$PROVINCE_STATE_NAME)), 
	Positive = tapply(data$PEOPLE_POSITIVE_CASES_COUNT, 
	list(data$PROVINCE_STATE_NAME), sum))
geom_line_data <- geom_line_data[-1, ]

#geom_line 
ggplot(data = geom_line_data, 
	aes(x = factor(Province), y = Positive, group = 1)) + 
	geom_line(stat = "identity") + 
	labs(x = "Province", y = "Positive Cases", title = "COVID-19 Positive Cases by Province") + 
	theme(axis.title = element_text(size = 8), axis.text = element_text(angle = 45, size = 5, color = 'grey'))

![分组求和折线图](https://img-blog.csdnimg.cn/20200912164810560.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUzMjM1Nw==,size_16,color_FFFFFF,t_70#pic_center
同样,如果想要在折线图中添加折线点,只需要在代码后加入 geom_point 函数

#geom_line with point
ggplot(data = geom_line_data, 
	aes(x = factor(Province), y = Positive, group = 1)) + 
	geom_line(stat = "identity") + 
	geom_point(size = 3, shape = 20) + labs(x = "Province", y = "Positive Cases", title = "COVID-19 Positive Cases by Province") + 
	theme(axis.title = element_text(size = 8), axis.text = element_text(angle = 45, size = 5, color = 'grey'))
	

效果如下:
带点折线图

总结

很抱歉这期写的有些匆忙,只整理了一些折线图的画法。
其实对于 ggplot2 折线图的画法我很想强调的一点是,geom_line 这个函数使用非常简单,但由于功能的局限,对于折线图的画法需要一些前期步骤,整理出供折线图作画的数据集。对于折线图的画法已经很常见,而对于需要分组求和进而做出折线图的教程几乎没有,我写这一期的目的也源于此。因为写的匆忙,本期这篇只列出了一些重点,后续可能会对此篇进行更新,加入颜色调整、背景修饰等细节内容。
当然如果大家对于本篇或是以后的更新主题有感兴趣的话题和不清楚的地方,也欢迎大家在评论区进行补充!

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值