这是一个仅使用基础 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)
您可以cex
在plot
通话中使用使数字显得更大。
您可以按如下方式添加圆圈。注意 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)
当然,真正的关键,这样做也将掌握的数据结构来拨打电话进入plot
,symbols
和text
高效。
这是一个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)