我不确定为什么这是错的。我基本上是尝试使用ggplot在HTML模板上创建进度条。为此,我需要创建一个for循环并将其存储在r中的temp文件夹中。然后将png文件编码为base64格式,以便将其放在HTML图像标记上。
library(catools)
a <- seq(1:10)
1:length(a)
for (i in 1:length(a)){
total_questions <- 8
current_question<- i+1
group <- rbind("Total Questions", "Current question")
progress <- rbind(total_questions, current_question)
colnames(progress)<- "Progress"
progress <- as.data.frame(progress)
progress_bar <- cbind(group,progress)
# save example plot to file
png(tec <- tempfile(paste0("image",i), fileext = ".png"))
ggplot(progress_bar, aes(group, Progress,fill=group), height=1000, width=800) + geom_histogram(stat="identity")
dev.off()
# Base64-encode file
txt <- base64Encode(readBin(tec, "raw", file.info(tec)[1, "size"]), "txt")
txt
}
这是我的错误。
文件错误(con,&#34; rb&#34;):无法打开连接另外: 警告消息:在文件中(con,&#34; rb&#34;):无法打开文件 &#39; /var/folders/w0/lrdx2zvn2hgf_ds0f92hpy500000gn/T//RtmpWD4Ysl/image114459476144.png' ;: 没有这样的文件或目录
答案 0 :(得分:1)
您可以使用ggsave
代替。它可以保存任何ggplot2图,默认为最后一个。它会根据提供的文件路径的扩展名自动检测要写入的文件类型(此处为.png)。
此外,手动设置尺寸(宽度和高度)可以更加可靠地保存图形(否则,图形大小是您当前未设置的png设备的大小,默认为当前大小绘图屏幕IIRC)。
tec <- tempfile(paste0("image",i), fileext = ".png")
p <- ggplot( // your plot here // )
ggsave(tec, p, width=5, height=5)
请仔细选择尺码,因为它会对字体大小产生很大影响。如果您的使用需要5x5图像,则保存到10x10将导致文本在裁剪后减小两倍。如果您需要10x10图像,保存到5x5将会很难看。
如果您正在开发某种需要进度条图像的软件,您可能希望将图像保存为pdf,以使图像在任何尺寸下都能看起来很好。
答案 1 :(得分:1)
所以这对我有用。我能够创建并将每个绘图保存到临时文件中,然后继续获取base64代码,然后将其链接到html中的图像标记。因此,每当用户点击下一个问题时,新网页中的条形图将增加i。
require(grid)
require(ggplot2)
a <- seq(1:10)
for(i in 1:length(a)){
total_questions <- 10
current_question<- i
group <- rbind("Total Questions", "Current question")
progress <- rbind(total_questions, current_question)
colnames(progress) <- "Progress"
progress <- as.data.frame(progress)
progress_bar <- cbind(group,progress)
# save example plot to file
png(tec <- tempfile(fileext = ".png"), height=200, width=300)
p <- ggplot(progress_bar, aes(group, Progress,fill=group)) + geom_histogram(stat="identity") + coord_flip() + xlab("") + ylab("") + theme(legend.position="none")
gt <- ggplot_gtable(ggplot_build(p))
# plot table without spacing.
ge <- subset(gt$layout, name == "panel")
grid <- grid.draw(gt[ge$t:ge$b, ge$l:ge$r])
dev.off()
# Base64-encode file
library(RCurl)
txt <- base64Encode(readBin(tec, "raw", file.info(tec)[1, "size"]), "txt")
txt
}