在 R 图形的图例中包含小表格

use*_*432 5 plot r

我正在为按国家/地区分组的公司绘制销售点图。所以我的代码是dotchart(sales, labels=company, groups=country, data=mydata). 我还创建了一个按国家/地区划分的平均销售额表。有没有办法将此表作为图例包含在点图中?

四个小时后......我偶然发现了一种使用包中的addtable2plot命令将表格信息添加到绘图的非常巧妙的方法plotrix。跟进 chl 的例子:

res <- matrix(nc=3, nr=4)
for (i in 1:4) res[i,] <- tapply(iris[,i], iris[,5], mean)
colnames(res) <- levels(iris[,5])
rownames(res) <- colnames(iris)[1:4]

library(plotrix)
dotchart(res, auto.key=list(position="top", column=3), xlab="Mean"); addtable2plot(3,15, res, cex=.8)
Run Code Online (Sandbox Code Playgroud)

chl*_*chl 3

这是我的看法grid(以及 Iris 数据集):

library(lattice)
library(grid)
library(gridExtra)
res <- matrix(nc=3, nr=4)
for (i in 1:4) res[i,] <- tapply(iris[,i], iris[,5], mean)
colnames(res) <- levels(iris[,5])
rownames(res) <- colnames(iris)[1:4]
dp <- dotplot(res, auto.key=list(position="top", column=3), xlab="Mean")

pdf("1.pdf", width=10, height=5)
grid.newpage() 
pushViewport(viewport(layout=grid.layout(1, 2, widths=unit(c(5,4), "inches"))))

pushViewport(viewport(layout.pos.col=1, layout.pos.row=1)) 
print(dp, newpage=FALSE) 
popViewport(1)

pushViewport(viewport(layout.pos.col=2, layout.pos.row=1, clip="on"))
grid.draw(tableGrob(head(iris), gp=gpar(fontsize=6, lwd=.5)))
popViewport()
dev.off()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ggplot2Hadley Wickham 的 github 页面上提供了另一种解决方案,将 ggplot2 图表与其他图形输出混合。最后,在线帮助页面包含gridExtra::grid.arrange()其他示例。

为了在图中显示表格,我们可以修改代码如下:

grid.newpage() 
pushViewport(viewport(layout=grid.layout(1, 1, widths=unit(c(5,4), "inches"))))

pushViewport(viewport(layout.pos.col=1, layout.pos.row=1)) 
print(dp, newpage=FALSE) 
popViewport(1)

pushViewport(viewport(x=0.5, y=0.3, clip="off"))
grid.draw(tableGrob(head(iris), padding.v=unit(1, "mm"), padding.h=unit(1, "mm"), 
          gp=gpar(fontsize=6, lwd=.5)))
popViewport()
Run Code Online (Sandbox Code Playgroud)

这产生

在此输入图像描述

theme=(调用时可以使用更改单元格的背景颜色tableGrob()。)