将基于文本的面板添加到基本图形布局

时间:2013-10-02 19:31:58

标签: r graphics

以2行2列排列的3个图

 attach(mtcars)
 par(mfrow=c(2,2))
 plot(wt,mpg, main="Scatterplot of wt vs. mpg")
 plot(wt,disp, main="Scatterplot of wt vs disp")
 boxplot(wt, main="Boxplot of wt")

但是如何创建仅包含文本的面板,然后将其添加到网格中的第四个位置。道歉。我现在看到,像许多问问者一样,我要求你从我的代码中读出我的想法或直觉,我希望文本在空白区域的网格中左对齐排列。

(出于某种原因,这似乎是完全合理的,但它已被删除,尽管没有提供重复投票或提名重复提名。我会把我拼凑的东西放在一起作为答案,但可能会有更优雅的解决方案。我确实看过类似问题提名的标题,但没有找到与此问题相符的任何内容。)

plot(1:100, 1:100, axes=FALSE, ylab="", xlab="", type="n")
text( rep(c(1,50), each=10), rep( seq(1, 100, by=10),2), labels=letters[1:20])

我想知道细粒度网格是否是正确的方法。也许具有恰当数量的行和列并使用左对齐文本的较粗网格将更像表格。带有baptiste的tableGrob的gridExtra包也可能是一个富有成效的方向。

“情节”的替代文字参数可能是:

txt <- structure(c("am", "carb", "cyl", "disp", "drat", "gear", "hp", 
                   "mpg", "qsec", "vs", "wt", "this"), .Dim = 3:4)


> txt
     [,1]   [,2]   [,3]   [,4]  
[1,] "am"   "disp" "hp"   "vs"  
[2,] "carb" "drat" "mpg"  "wt"  
[3,] "cyl"  "gear" "qsec" "this"

3 个答案:

答案 0 :(得分:1)

这是一个例子,

library(gplots)
textplot(txt)

enter image description here

addtable2plot中还有plotrix,另一种解决方案是将base和grid图形与gridBase包混合,并从tableGrob包中放置gridExtra

答案 1 :(得分:1)

以为我会在这里投入两分钱。我看到两种简单的方法(没有显示行和列索引,如当前配置)。两者都使用了你提出的text,但是要在你讨论的粗略网格中布局,但不要显示。对于左对齐,关键参数为pos

选项1(使用换行符创建网格)

attach(mtcars)
par(mfrow=c(2,2))
plot(wt,mpg, main="Scatterplot of wt vs. mpg")
plot(wt,disp, main="Scatterplot of wt vs disp")
boxplot(wt, main="Boxplot of wt")
txt <- structure(c("am", "carb", "cyl", "disp", "drat", "gear", "hp", 
                   "mpg", "qsec", "vs", "wt", "this"), .Dim = 3:4)

plot.new()
sapply(1:4, function(i) text(i/4, .5, paste(txt[,i],collapse='\n'), pos=4))

enter image description here

选项2(使用文本向量化来创建网格)

attach(mtcars)
par(mfrow=c(2,2))
plot(wt,mpg, main="Scatterplot of wt vs. mpg")
plot(wt,disp, main="Scatterplot of wt vs disp")
boxplot(wt, main="Boxplot of wt")
txt <- structure(c("am", "carb", "cyl", "disp", "drat", "gear", "hp", 
                   "mpg", "qsec", "vs", "wt", "this"), .Dim = 3:4)

plot.new()
sapply(1:4, function(i) text(i/4, (1:3)/3, rev(txt[,i]), pos=4))

enter image description here

答案 2 :(得分:0)

不确定你想要什么文字,但这里是“你好世界”:

plot.new()
text(0.5,0.5,"hello world",cex=6)

enter image description here