首页 > 解决方案 > 将两个 ggplot 散点图与横断面作为原点相结合

问题描述

我在州立公园担任林业技术人员,我的老板有兴趣寻找新的方法来绘制我们的林业地块。我们在 0.6 英亩的正方形(所有地块边界为 49.2m)中收集了树木数据。我们从两个水平样带中收集了树木位置数据,一个在 10.1m,一个在 39.1m,都从南到北。

我们以这种方式收集数据是因为很难从一个样带中看到图中的所有树木。所以,我有来自样带 1 的一些树位置的 x,y 数据,一些来自样带 2,还有一些来自两个样带以比较准确性。

X 是沿样带的距离,Y 是到树的距离,都成直角。如果树在样带的西边,它的 Y 值为负,如果它在东边,它的 Y 值是正的。你明白为什么我不能将数据合并到一个数据集中吗?

我可以按照我想要的方式绘制两个图(在脚本下方),但我需要将它们放在同一个图上,这样我就可以比较从样带 1 和样带 2 测量的那些树。我不知道如何要做到这一点,因为横断面需要是两个不同的起源。

如何覆盖ggplot显示横断面的两个散点图?任何帮助是极大的赞赏。

我已经阅读了所有相关的帖子,但没有找到任何有效的方法。有一篇使用 geom_step 的有趣帖子,但我无法用我当前的代码弄清楚。我需要保持 aes() 线原样(我认为),以便这些点显示为树 DBH 的表示。

p1<-ggplot(trans1, aes(x=Transect.1.Distance.from, 
y=Transect.1.Distance.Along)) + 
  geom_point(colour="red",aes(size=DBHcm))
p2<-p1 + geom_hline(yintercept = 0)
p2
p3<-ggplot(trans2, aes(x=Transect.2.Distance.from, 
y=Transect.2.Distance.along)) + 
  geom_point(colour="black",aes(size=DBHcm))
p4<-p3+geom_hline(yintercept = 0)
p4

我试着做一些愚蠢的事情,比如 ggplot(p2+p4) 但错误信息说

“错误:不知道如何将 p4 添加到绘图中”

以下是样带 1 和 2 中我的数据集中的一些示例数据:

Tree ID Species DBHcm   Cut Transect1.Distance.from Transect1.Distance.Along
336 PSMEM   34.60   No  9.4 -6.3
408 SESE3   50.70   Yes 3.5 -2.7
337 PSMEM   36.30   Yes 9.6 -3.2
409 SESE3   48.10   Yes 5.4 3.6
338 PSMEM   19.00   Yes 13.7    -4.8
410 PSMEM   30.90   No  10  1.7
339 PSMEM   28.50   Yes 13.6    -7.8

Tree ID Species DBHcm   Cut Transect2.Distance.from Transect2.Distance.along
446 PSMEM   24.50   Yes 44.3    -10.1
379 SESE3   23.10   No  50  -11
447 PSMEM   32.30   No  40.2    -8.8
380 PSMEM   22.10   No  51.5    -10.4
381 PSMEM   29.20   No  48.8    -7.3
448 PSMEM   42.80   No  39.3    -4.8
382 PSMEM   18.70   No  46.6    -6.4
449 PSMEM   24.00   No  43  -5.8
383 SESE3   12.60   No  48.1    -7.3
385 SESE3   28.00   No  51.8    -7.3

这是我运行建议的代码时得到的图, 在此处输入图像描述

标签: rggplot2

解决方案


试试这个开始。如果确实有效,请提供一些数据进行测试。

p <- ggplot() + 
  geom_point(data = trans1, aes(x=Transect.1.Distance.from, 
                       y=Transect.1.Distance.Along, size=DBHcm), colour="red") + 
  geom_hline(yintercept = 0) + 
  geom_point(data = trans2, aes(x=Transect.2.Distance.from, 
                       y=Transect.2.Distance.along, size=DBHcm), color = "black")  

p

使用您提供的数据:

library(tidyverse)
trans1 <- tribble(
  ~TreeID, ~Species, ~DBHcm, ~Cut,  ~Transect1.Distance.from, ~Transect1.Distance.Along, 
  336, "PSMEM",   34.60,   "No",  9.4, -6.3,
  408, "SESE3",   50.70,   "Yes", 3.5, -2.7,
  337, "PSMEM",   36.30,   "Yes", 9.6, -3.2,
  409, "SESE3",   48.10,   "Yes", 5.4,  3.6,
  338, "PSMEM",   19.00,   "Yes", 13.7, -4.8,
  410, "PSMEM",   30.90,   "No",  10,  1.7,
  339, "PSMEM",   28.50,   "Yes", 13.6, -7.8
)

trans2 <- tribble(
  ~TreeID, ~Species, ~DBHcm, ~Cut,  ~Transect2.Distance.from, ~Transect2.Distance.Along,
  446, "PSMEM",   24.50,   "Yes", 44.3,    -10.1,
  379, "SESE3",   23.10,   "No",  50,  -11,
  447, "PSMEM",   32.30,   "No",  40.2,    -8.8,
  380, "PSMEM",   22.10,   "No",  51.5,    -10.4,
  381, "PSMEM",   29.20,   "No",  48.8,    -7.3,
  448, "PSMEM",   42.80,   "No",  39.3,    -4.8,
  382, "PSMEM",   18.70,   "No",  46.6,    -6.4,
  449, "PSMEM",   24.00,   "No",  43,  -5.8,
  383, "SESE3",   12.60,   "No",  48.1,    -7.3,
  385, "SESE3",   28.00,   "No",  51.8,    -7.3
)

和相同的代码:

p <- ggplot() + 
  geom_point(data = trans1, aes(x=Transect1.Distance.from, 
                                y=Transect1.Distance.Along, size=DBHcm), colour="red") + 
  geom_hline(yintercept = 0) + 
  geom_point(data = trans2, aes(x=Transect2.Distance.from, 
                                y=Transect2.Distance.Along, size=DBHcm), color = "black")  

p

在此处输入图像描述


推荐阅读