在R中绘制3x3方格

时间:2014-11-20 01:11:19

标签: r r-grid

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

pic

3 个答案:

答案 0 :(得分: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())

enter image description here

答案 1 :(得分:3)

此处使用plotrix(抱歉,如果您使用套餐会更容易!)和@ nograpes的df数据。

library(plotrix)
xt <- xtabs(val ~ ., df[c(2,1,3)])
color2D.matplot(xt, vcex = 3, show.values = 1, axes = FALSE, xlab = "",   
                ylab = "", cellcolors = rep("white", length(xt)))

enter image description here

如果其他答案发生变化,df是用

构建的
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')])]

答案 2 :(得分:3)

这是一个很好的解决方案,只使用基数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()

您可以在cex来电中使用plot,使数字显得更大。

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

symbols(1.5,1.5,circles=1,add=TRUE)

要注释注释,请设置圆圈的背景并使用points绘制其他文字注释。

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

当然,做好这一点的真正关键是掌握数据结构,以便有效地调用plotsymbolstext

sample output