首页 > 解决方案 > 使用同一列中的值创建 RMSE 和相关系数图

问题描述

我的数据框如下

sos     eos     dataset     site                year
171     280     PhenoCam    Pheno_alligator     2016
130     275     PhenoCam    Pheno_alligator     2017
149     277     PhenoCam    Pheno_harvard2      2016
156     259     Landsat     Landsat_alligator   2016
157     247     Landsat     Landsat_alligator   2017
134     294     Landsat     Landsat_harvard2    2016
154     286     MODIS       MODIS_alligator     2016

并且数据继续包含 1000 多个条目。数据框 site_type共有四个数据集,三年(2016、2017、2018)。我想在 PhenoCam vs Landsat 的 ggplot 中制作散点图,使用它们的 sos 值,但无法弄清楚如何正确设置将aesPhenoCam sos 作为 y 轴值,将 Landsat sos 作为 x 轴值。此散点图将用于显示 RMSE 和 R,因此,例如,Pheno_alligator 2016 年的 sos 需要与 Landsat_alligator 2016 年进行绘图。

我知道通常代码会是这样的

ggplot(site_type, aes(Landsat, PhenoCam)) +
geom_point()

但事实上他们在同一列中发生了很多事情,这让我很失望。我将制作 6 个散点图(PhenoCam 与 sos 和 eos 的每个数据集),但只需要一个指导。谢谢!

标签: rggplot2

解决方案


因此,您的值是根据变量“site”(在您的示例中为“alligator”或“harvard2”)名称的结尾和年份配对的。

您可以做的是重塑数据集以获得以下数据:

library(tidyr)
library(dplyr)

df %>% rowwise() %>% mutate(site = unlist(strsplit(site,"_"))[2]) %>%
  select(-eos) %>%
  pivot_wider(names_from = dataset, values_from = sos)

# A tibble: 3 x 5
  site       year PhenoCam Landsat MODIS
  <chr>     <int>    <int>   <int> <int>
1 alligator  2016      171     156   154
2 alligator  2017      130     157    NA
3 harvard2   2016      149     134    NA

有了这个,您可以通过执行以下操作轻松获得散点图:

library(tidyr)
library(dplyr)
library(ggplot2)

df %>% rowwise() %>% mutate(site = unlist(strsplit(site,"_"))[2]) %>%
  select(-eos) %>%
  pivot_wider(names_from = dataset, values_from = sos) %>%
  ggplot(aes(x= Landsat, y = PhenoCam, color = site))+
  geom_point()

在此处输入图像描述

它回答了你的问题吗?


推荐阅读