r - 使用同一列中的值创建 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 值,但无法弄清楚如何正确设置将aes
PhenoCam 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 的每个数据集),但只需要一个指导。谢谢!
解决方案
因此,您的值是根据变量“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()
它回答了你的问题吗?
推荐阅读
- ruby-on-rails - 在 Docker 容器上设置 Rails 控制台不接受任何输入
- asp.net-core - 使用类型化的 HttpClient 创建 LinkedTokenSource
- javascript - 如何在鼠标下获取每个 SVG 元素的列表并在 SVG 中更改 mouseenter/touchstart 下每个元素的颜色
- kotlin - 将具体的泛型类型转换为具有 Any 上限的非 null
- javascript - 向菜单项添加类而不改变样式
- salesforce - 将 Salesforce Einstein 聊天机器人集成到使用 Dot Net 和 Angular 构建的网站中
- elasticsearch - Elasticsearch基于公共字段合并多个索引
- macos - 无法编译库,运行 make 时找不到符号
- python - python中结合线性和非线性回归
- bash - 在直线中将 hql 输出导出到 csv