首页 > 解决方案 > 在 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(如果是两个后续观察到的数据点,则为纯线,否则为虚线)。

非常感谢你的帮助——我认为这个练习并不容易,我会从你的投入中学到很多东西。

标签: rggplot2

解决方案


在折线图中以有意义的方式同时绘制两个变量会有点困难。如果您使用pivot_longer创建一个包含 var1_imp 和 var2_imp 值的列会更容易。然后,您将拥有一个包含 var1_imp 和 var2_imp 的键列,以及一个包含这两个值的值列。然后,您可以将年份用作 x,将新值列用作 y,并将填充设置为键列。然后,您将在每个国家/地区获得两条线路。

但是,根据 193 个国家/地区的折线图查找异常值并不是一个好主意。利用

outlier_values <- boxplot.stats(airquality$Ozone)$out

用于获取列中的异常值,或与 sapply 类似以获取多列。异常值通常定义为 1.5* IQR,因此很容易找出哪些是异常值。


推荐阅读