簡體   English   中英

如何在 R 中的多繪圖面板中跨繪圖或繪圖之間進行注釋

[英]How to annotate across or between plots in multi-plot panels in R

如果我在一個面板中有多個繪圖,我希望能夠放置跨越多個繪圖區域或繪圖區域之間的文本注釋。 我敢肯定一定有辦法做到這一點,但我需要一些幫助來弄清楚如何做。
這是一些在一個面板上創建四個圖的假數據:

x1 = rnorm(100)
x2 = rnorm(100)
x3 = rnorm(100)
x4 = rnorm(100)

par(mfrow=c(2,2)) 
hist(x1, xlab="", main="Group A")
hist(x2, xlab="", main="Group B")
hist(x3, xlab="", main="")
hist(x4, xlab="", main="")

這將創建下面的多圖面板,除了我還添加了紅色文本。 在 R 中創建圖形面板后,我通過注釋 PDF 文件添加了紅色文本,然后將其另存為 PDF。 我想學習的是如何在 R 中以編程方式注釋圖形面板,而不是必須保存它並注釋保存的文件。
通常,我只會使用text()mtext()添加注釋。 但這僅在您注釋單個圖形時才有效。 有沒有辦法添加相對於整個 4 圖面板坐標的注釋? 我現在正在尋找基礎圖形的解決方案,但如果有人知道如何在 ggplot2 或 lattice 中做類似的事情,我也會有興趣看到它。在此處輸入圖像描述

如果你真的想更好地控制這些類型的布局問題,你可以使用恰當命名的layout

m <- matrix(c(1,2,3,3,4,5,6,6),ncol = 2,byrow = TRUE)
layout(m,widths = c(0.5,0.5),heights = c(0.45,0.05,0.45,0.05))

par(mar = c(2,4,4,2) + 0.1)
hist(x1, xlab="", main="Group A")
hist(x2, xlab="", main="Group B")

par(mar = c(0,0,0,0)) 
plot(1,1,type = "n",frame.plot = FALSE,axes = FALSE)
u <- par("usr")
text(1,u[4],labels = "Here",col = "red",pos = 1)

par(mar = c(2,4,2,2) + 0.1)
hist(x3, xlab="", main="")
hist(x4, xlab="", main="")

par(mar = c(0,0,0,0)) 
plot(1,1,type = "n",frame.plot = FALSE,axes = FALSE)
u <- par("usr")
text(1,u[4],labels = "Here",col = "red",pos = 1)

在此處輸入圖像描述

您想將mtextouter=TRUE一起使用。 例如, mtext('Results2', side=1, line=-2, outer=TRUE)mtext('Results1', side=3, line=-20, outer=TRUE)

對於這個例子, layout函數是最簡單的,正如已經展示的那樣,但是對於更一般的情況,您還應該學習grconvertXgrconvertY函數(以及使用par(xpd=設置裁剪)。轉換函數可以為您提供當前坐標不同坐標系的用戶坐標,例如,您可以通過從規范化設備坐標轉換 0.5 來使頁面居中。

下面是一個使用 Greg Snow 方法的例子:

par(mfrow=c(2, 2))
replicate(4, plot(matrix(runif(20), nrow=10)))
text(grconvertX(.5, "ndc", "user"), grconvertY(.25, "ndc", "user"), "TEST", cex=3, col="red", xpd=NA)
text(grconvertX(.5, "ndc", "user"), grconvertY(.75, "ndc", "user"), "TEST", cex=3, col="red", xpd=NA)

過度情節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM