我得到了一个数字列表(n = 9),并希望在3 * 3方格中绘制出来,每个网格填充相应的数字。如何在R中执行此操作而无需安装其他软件包,例如plotrix。非常感谢!
答案 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())
答案 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)))
如果其他答案发生变化,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)
当然,做好这一点的真正关键是掌握数据结构,以便有效地调用plot
,symbols
和text
。