我正在尝试开发将生成随机5x5矩阵的脚本(请参阅代码),通过ggplot2显示,并通过png()
导出对象放置。我有基础,但在哪里(我认为)我遇到的问题是导出图像
library(ggplot2)
library(grid)
### 5x5 Array ###
for(d1l in c(12, 9, 7)) {
for(i in 1:20) {
a5 <- matrix(nrow = 5, ncol = 5) # Empty 5x5 matrix
a5l <- length(a5) # Number of cells in array
ind <- sample(x = length(a5), replace = F, size = a5l) # Rand. indexes
a5[ind[1:d1l]] <- "X" # Write objects to rand. indexes
a5[ind[d1l+1:24]] <- "O" # Write remaining obj to rand. indexes
a5[ind[25]] <- "T" # Place target
# Turn into data frame for ggplot2
testdf <- data.frame("row"=substr(levels(interaction(1:5, 1:5, sep="")),1,1),
"col"=substr(levels(interaction(1:5, 1:5, sep="")),2,2),
"val"=a5[1:25],
"colour"=ifelse(a5[1:25]=="X", "green", "red"))
# Initiate graphics device
png(paste0("figs/", d1l,"items-interation",i,".png") , height=1080, width=1920)
# Generate plot
ggplot(testdf, aes(x=row, y=col, shape=val, colour=colour))+
geom_point(position=position_jitter(width=.2, height=.2), size=15)+
scale_shape_manual(values=c("O"=1, "X"=4, "T"=4))+
scale_colour_manual(values=c("red"="red", "green"="green4"))+
theme_minimal()+
theme(panel.grid.major = element_blank(),
axis.text = element_blank(),
axis.title = element_blank(),
legend.position = "none")
# Force editing
grid.force()
# Changing thickness of shapes
grid.edit("geom_point.points", grep = TRUE, gp = gpar(lwd = 5))
# Turn off gr device
dev.off()
}
}
根据我运行脚本的位置,我遇到了不同的错误:
Error in (function (filename = "Rplot%03d.png", width = 480, height = 480, :
unable to start png() device
或
Error in editDLfromGPath(gPath, specs, strict, grep, global, redraw) :
'gPath' (geom_point.points) not found
我很难排除我的格式错误,因此非常感谢理解错误的任何帮助。
答案 0 :(得分:0)
--- LINE THICKNESS ---
您可以使用stroke
来控制形状的线条粗细
geom_point(position=position_jitter(width=.2, height=.2), size=15, stroke=5)
然后您不需要使用grid
,grid.edit
,grid.force
(删除这些命令)。
----保存地图-----
您可以使用ggplots
保存ggsave
。在ggsave
ggplot
ggsave(paste0("figs/", d1l,"items-interation",i,".png"), width = 9, height = 9, dpi = 100)
----简化的建议----
您还可以使用以下方法简化make-random-matrix命令:
a5 <- sample(c(rep("X",d1l),rep("O",25-d1l)),replace=F)
a5[sample(1:25,1)] <- "T"
a5 <- matrix(a5,nrow=5)
可以取代:
a5 <- matrix(nrow = 5, ncol = 5) # Empty 5x5 matrix
a5l <- length(a5) # Number of cells in array
ind <- sample(x = length(a5), replace = F, size = a5l) # Rand. indexes
a5[ind[1:d1l]] <- "X" # Write objects to rand. indexes
a5[ind[d1l+1:24]] <- "O" # Write remaining obj to rand. indexes
a5[ind[25]] <- "T" # Place target