在R中绘制3x3方格

use*_*735 4 r r-grid

我得到一个数字列表(n = 9),并希望在3*3方格网格中绘制它们,每个网格填充相应的数字.如何在R中执行此操作而无需安装其他软件包,例如plotrix.非常感谢!

PIC

vpi*_*pkt 6

这是一个仅使用基础 R 并输出到 png 的好解决方案。请注意,默认png设备具有相等的宽度和高度。

png("magic_square.png")
par(mar=c(.5,.5,.5,.5))
plot(x=df$x,y=df$y,pch=as.character(df$val), 
     asp=1, xlim=c(0.5,3.5),ylim=c(0.5,3.5),xaxt="n",yaxt="n",xlab="",ylab="",
xaxs="i", yaxs="i", axes=F)
abline(v=0.5+(0:3),h=0.5+(0:3))
dev.off()
Run Code Online (Sandbox Code Playgroud)

您可以cexplot通话中使用使数字显得更大。

您可以按如下方式添加圆圈。注意 abline 位置。

symbols(1.5,1.5,circles=1,add=TRUE)
Run Code Online (Sandbox Code Playgroud)

并按照注释中所示进行注释,设置圆圈的背景并用于points绘制附加文本注释。

symbols(1.5,1.5,circles=1,bg="white",add=TRUE)
text(x=1.5,y=1.5,labels="17",cex=3)
Run Code Online (Sandbox Code Playgroud)

当然,真正的关键,这样做也将掌握的数据结构来拨打电话进入plotsymbolstext高效。

样本输出


nog*_*pes 5

这是一个ggplot比我预期的更难的解决方案:

# Setup the data
m <- matrix(c(8,3,4,1,5,9,6,7,2), nrow=3, ncol=3)
df <- expand.grid(x=1:ncol(m),y=1:nrow(m))
df$val <- m[as.matrix(df[c('y','x')])]

library(ggplot2)
library(scales)
ggplot(df, aes(x=x, y=y, label=val)) + 
  geom_tile(fill='transparent', colour = 'black') + 
  geom_text(size = 14) + 
  scale_y_reverse() +
  theme_classic() + 
  theme(axis.text  = element_blank(),
        panel.grid = element_blank(),
        axis.line  = element_blank(),
        axis.ticks = element_blank(),
        axis.title = element_blank())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述