r - 在 R 中使用 ggplot 为每个国家创建一个折线图
问题描述
我的数据集构造如下:
# A tibble: 20 x 8
iso3 year Var1 Var1_imp Var2 Var2_imp Var1_type Var2_type
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 ATG 2000 NA 144 NA 277 imputed imputed
2 ATG 2001 NA 144 NA 277 imputed imputed
3 ATG 2002 NA 144 NA 277 imputed imputed
4 ATG 2003 NA 144 NA 277 imputed imputed
5 ATG 2004 NA 144 NA 277 imputed imputed
6 ATG 2005 NA 144 NA 277 imputed imputed
7 ATG 2006 NA 144 NA 277 imputed imputed
8 ATG 2007 144 144 277 277 observed observed
9 ATG 2008 45 45 NA 301 observed imputed
10 ATG 2009 NA 71.3 NA 325 imputed imputed
11 ATG 2010 NA 97.7 NA 349 imputed imputed
12 ATG 2011 NA 124 NA 373 imputed imputed
13 ATG 2012 NA 150. NA 397 imputed imputed
14 ATG 2013 NA 177. 421 421 imputed observed
15 ATG 2014 NA 203 434 434 imputed observed
16 ATG 2015 NA 229. 422 422 imputed observed
17 ATG 2016 NA 256. 424 424 imputed observed
18 ATG 2017 282 282 429 429 observed observed
19 ATG 2018 NA 282 435 435 imputed observed
20 EGY 2000 NA 38485 NA 146761 imputed imputed
我是 R 新手,我想为每个国家创建一个折线图,在同一张图表上使用实心圆圈在同一张图表上使用变量 Var1_imp 和 Var2_imp(我的数据库中有 193 个国家/地区的数据从 2000 年到 2018 年)估算数据时观察到的和未填充的圆圈(基于 Var1_type 和 VAR2_type)。如果观察到两个后续数据点,则圆圈将与线连接,否则圆圈将与虚线连接。
主要目标是逐个国家检查用于估算缺失数据的方法是好是坏,这取决于时间序列中是否存在异常值。
我尝试了以下方法:
ggplot(df, aes(x=year, y=Var1_imp, group=Var1_type))
+ geom_point(size=2, shape=21) # shape = 21 for unfilled circles and shape = 19 for filled circles
+ geom_line(linetype = "dashed") # () for not dotted line, otherwise linetype ="dashed"
我很难找出:1/如何为每个国家的每个变量制作一张图表 2/如何在同一张图表上同时包含 Var1_imp 和 Var2_imp 3/如何根据条件使用 geom_point(在 Var1_type 中估算与观察)4/如何根据条件使用 geom_line(如果是两个后续观察到的数据点,则为纯线,否则为虚线)。
非常感谢你的帮助——我认为这个练习并不容易,我会从你的投入中学到很多东西。
解决方案
在折线图中以有意义的方式同时绘制两个变量会有点困难。如果您使用pivot_longer
创建一个包含 var1_imp 和 var2_imp 值的列会更容易。然后,您将拥有一个包含 var1_imp 和 var2_imp 的键列,以及一个包含这两个值的值列。然后,您可以将年份用作 x,将新值列用作 y,并将填充设置为键列。然后,您将在每个国家/地区获得两条线路。
但是,根据 193 个国家/地区的折线图查找异常值并不是一个好主意。利用
outlier_values <- boxplot.stats(airquality$Ozone)$out
用于获取列中的异常值,或与 sapply 类似以获取多列。异常值通常定义为 1.5* IQR,因此很容易找出哪些是异常值。
推荐阅读
- comparison - 在 ADT 上如何定义多态比较?
- iis - 如何授予 IIS 进程读取网络位置的权限?
- apache-kafka - 如果 Kafka 丢失分区同步会发生什么
- java - 使用 Mockito 对 Spring Boot 控制器进行单元测试
- r - 无法将用户输入传递到 R 闪亮模块
- vue.js - Vue-jest 找不到 babel
- python - 从模型创建 graphene-django 接口
- php - htaccess 重写资产目录
- android - Gradle下载错误版本的appcompat
- embedded - 其他节点如何在 CAN 总线上确认传输的 CAN 报文?