R底图,结合镜像直角三角形

R base plot, combine mirrored right triangles

我正在尝试构建一些由 2 个直角三角形组成的图形,它们以彼此的镜像排列。最终的地块将有独特的数据集,但现在我正在绘制相同的数据。我更熟悉(可能被 ggplot 宠坏了),但我发现在基数 R 中移动轴位置要容易得多。如果有人知道如何在 ggplot 中复制这些直角三角形图,我会接受这个答案!

我在调整间距和布局时遇到问题。我不太熟悉 base R 绘图,抱歉,如果这些有点基础。

我特别想:

谢谢!

正如 @GregorThomas 所建议的那样,绘制单个图可能更好。为此,需要一个 transformed 附加数据框,将值移动 x.dist.

的距离
my.data <- data.frame(my.x=c(.2, .4, .6, .1), my.y=c(.3, .5, .7, .9))
x.dist <- .5
my.data.2 <- transform(my.data, my.y=my.y + x.dist)

现在我已经对你的函数进行了大量修改,我建议逐行弄清楚我使用了哪些参数。重要的是,我使用 xpd=TRUE 能够绘制超出绘图区域的绘图。使用 par 我稍微扩展了 margins。我使用 mtextaxis 来获取刻度线和标签。为了使对角线与轴齐平,我使用 lines 而不是 abline。 bottom.triangle2 现在使用 points 而不是 plot,因为 plot 没有 add=TRUE 参数。而我在top.triangle2中使用asp=1来制作等边三角形。

top.triangle2 <- function() {
  plot(my.y ~ my.x, data= my.data, axes=FALSE, ylab='', xlab="", 
       main='', xlim=c(0, 1), ylim=c(0, 1), xaxt="n", yaxt="n", asp=1)
  mtext("Here could be your title", 3, 5, font=2, cex=1.3, adj=.95)
  mtext("Position.2", 2, .75)
  mtext("Position.1", 3, 2)
  axis(side=2, las=1, pos=0)
  axis(side=3, las=1, pos=1)
  lines(0:1, 0:1)
}

bottom.triangle2 <- function() {
  points(my.x ~ my.y, data=my.data.2, xpd=TRUE)
  mtext("Position.2", 1, 1.5, at=mean(par()$usr[1:2]) + x.dist)
  mtext("Position.1", 4, 3, padj=par()$usr[1] + 10)
  x.at <- axisTicks(par()$usr[1:2], 0) + x.dist
  axis(side=1, las=1, pos=0, at=x.at, 
       labels=F, xpd=TRUE)
  mtext(seq(0, 1, .2), 1, 0, at=x.at)
  axis(4, las=1, pos=1 + x.dist)
  lines(0:1 + x.dist, 0:1, xpd=TRUE)
}

我使用 png 来获得可重现的输出。

png("myplot.png", width=650, height=500)
op <- par(mar=c(3, 4, 8, 12) + 0.1, oma=c(2, 0, 0, 2))
top.triangle2()
bottom.triangle2()
par(op)
dev.off()

结果

也许您自己想出如何避免那么多硬编码。