首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制字符

绘制字符
EN

Stack Overflow用户
提问于 2020-01-30 22:08:25
回答 1查看 34关注 0票数 1

我对R(第三周)真的很陌生。我正在尝试绘制一个由10个地点组成的数据集,每个地点最多16个点,在3个不同的土壤深度。我的样本结果是2个电子受体DO和NO3的高,中和低。我想要绘制每个土壤深度的每个站点/地块的结果。可以单独完成,但如果有一种方法可以堆叠多个绘图,那就太棒了!(可能是非常高级的。)这是我的数据集的一个示例。

代码语言:javascript
复制
Site Plot DO(1m) DO(3m) DO(5m) 
A     1     H     H      H    
A     2     H     H      M 
A     3     H     L      H 
A     4     H     H      L 
A     5     M     H      H
A     6     L     H      M

到目前为止,我已经尝试过:

代码语言:javascript
复制
plot(factor(Plot),Site) 
plot(Plot~factor(Site),DO 1m 

我的想法是像在地图上绘制一样,以地点和地块作为我的坐标。如果可能的话,我更喜欢ggplot

EN

回答 1

Stack Overflow用户

发布于 2020-01-31 02:45:36

根据你的数据,我认为一个很好的方式来呈现它将是一个“热图”。首先,我们可以将您的数据转换为更长的格式(我使用了tidyr中的pivot_longer来完成此操作),然后,我们可以使用ggplot中的geom_tile根据每个do的曲线图来创建每个DO得分的热图。

这种表示的优点是,当我们将分数作为填充值时,它将在ggplot2中自动创建一个配色方案。因此,我们不需要将字符格式转换为数字格式。如果要修改颜色图案,可以使用scale_fill_manual

总之,你可以这样写:

代码语言:javascript
复制
library(tidyr)
library(ggplot2)
library(dplyr)
df %>% pivot_longer(.,-c(Site, Plot), names_to = "DO",values_to = "Score") %>%
  ggplot(aes(x = as.factor(Plot), y = DO, fill = Score))+
  geom_tile(color = "black")+
  geom_text(aes(label = Score))+
  scale_y_discrete(labels = c("1m","2m","5m"))+
  labs(x = "Plot", title = "Site A")

它看起来和你期望的一样吗?

示例Data

代码语言:javascript
复制
structure(list(Site = c("A", "A", "A", "A", "A", "A"), Plot = 1:6, 
    `DO(1m)` = c("H", "H", "H", "H", "M", "L"), `DO(3m)` = c("H", 
    "H", "L", "H", "H", "H"), `DO(5m)` = c("H", "M", "H", "L", 
    "H", "M")), row.names = c(NA, -6L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x56276b4f1350>)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59987865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档