在RStudio正常运行的ggplot饼图代码在Kaggle报错求助
问题:Kaggle中ggplot饼图代码报错无法运行
这段ggplot饼图代码在RStudio中运行完全正常,但在Kaggle环境中执行时报错,无法生成图形:
pie_type_user <- data.frame(rider_type = c("Member", "Casual"), values = c(2189031, 1537785)) ggplot(pie_type_user, aes(x = "", y = values, fill = rider_type)) + geom_bar(stat = "identity", width = 1) + coord_polar(theta = "y") + labs(fill = "Rider Type") + ggtitle("Rides Per Year") + theme_void() + geom_text(aes(label = scales::comma(values)), position = position_stack(vjust = 0.5))
收到的报错信息:
ERROR while rich displaying an object: Error in grid.newpage(): could not open file 'Rplot001.png' Traceback: tryCatch(withCallingHandlers({ . if (!mime %in% names(repr::mime2repr)) . stop("No repr_* for mimetype ", mime, " in repr::mime2repr") . rpr <- repr::mime2repr[mime] . if (is.null(rpr)) . return(NULL) . prepare_content(is.raw(rpr), rpr) . }, error = error_handler), error = outer_handler) tryCatchList(expr, classes, parentenv, handlers) tryCatchOne(expr, names, parentenv, handlers[[1L]]) doTryCatch(return(expr), name, parentenv, handler) withCallingHandlers({ . if (!mime %in% names(repr::mime2repr)) . stop("No repr_* for mimetype ", mime, " in repr::mime2repr") . rpr <- repr::mime2repr[mime] . if (is.null(rpr)) . return(NULL) . prepare_content(is.raw(rpr), rpr) . }, error = error_handler) repr::mime2repr[mime] repr_text.default(obj) paste(capture.output(print(obj)), collapse = " ") capture.output(print(obj)) evalVis(expr) withVisible(eval(expr, pf)) eval(expr, pf) eval(expr, pf) print(obj) print.ggplot(obj) grid.newpage()
解决思路与建议
报错核心是grid.newpage()无法创建临时图片文件,这是Kaggle的R环境中图形渲染的权限或默认配置问题,可尝试以下几种方法:
显式指定图形设备并手动控制输出
先通过png()创建图片文件,绘图后关闭设备,再加载显示:# 创建图片设备 png("pie_plot.png", width = 800, height = 600) pie_type_user <- data.frame(rider_type = c("Member", "Casual"), values = c(2189031, 1537785)) ggplot(pie_type_user, aes(x = "", y = values, fill = rider_type)) + geom_bar(stat = "identity", width = 1) + coord_polar(theta = "y") + labs(fill = "Rider Type") + ggtitle("Rides Per Year") + theme_void() + geom_text(aes(label = scales::comma(values)), position = position_stack(vjust = 0.5)) # 关闭设备 dev.off() # 显示图片 knitr::include_graphics("pie_plot.png")调整repr包的图形输出配置
Kaggle的R环境依赖repr包处理图形显示,提前设置图形尺寸参数:library(repr) # 设置图形宽高 options(repr.plot.width = 8, repr.plot.height = 6) pie_type_user <- data.frame(rider_type = c("Member", "Casual"), values = c(2189031, 1537785)) ggplot(pie_type_user, aes(x = "", y = values, fill = rider_type)) + geom_bar(stat = "identity", width = 1) + coord_polar(theta = "y") + labs(fill = "Rider Type") + ggtitle("Rides Per Year") + theme_void() + geom_text(aes(label = scales::comma(values)), position = position_stack(vjust = 0.5))使用ggsave保存后加载显示
先将ggplot对象保存为图片文件,再调用显示:pie_type_user <- data.frame(rider_type = c("Member", "Casual"), values = c(2189031, 1537785)) p <- ggplot(pie_type_user, aes(x = "", y = values, fill = rider_type)) + geom_bar(stat = "identity", width = 1) + coord_polar(theta = "y") + labs(fill = "Rider Type") + ggtitle("Rides Per Year") + theme_void() + geom_text(aes(label = scales::comma(values)), position = position_stack(vjust = 0.5)) # 保存图片 ggsave("pie_plot.png", p, width = 8, height = 6) # 显示图片 knitr::include_graphics("pie_plot.png")
内容的提问来源于stack exchange,提问作者Bill_Stevenson1968
相关产品推荐
相关产品推荐

