R使用plotly的ggplotly函数时报与工作目录相关的错误
问题原因
ggplotly运行时需要临时生成HTML、JS等静态资源存放到临时目录,底层逻辑会自动读写工作目录和系统临时目录,当两类目录没有读写权限、路径被占用或不存在时,就会触发这个非显式的setwd报错。
解决方案
- 方案1:手动指定plotly的临时存储目录(优先级最高,适配绝大多数场景)
先创建一个你明确有读写权限的本地目录,再通过全局选项指定给plotly:
# 创建有权限的临时目录,路径可以自行替换 dir.create("~/plotly_cache", showWarnings = FALSE, recursive = TRUE) options(plotly.tempdir = "~/plotly_cache") # 再运行ggplotly即可 ggplotly(plot)
方案2:调整当前工作目录
先执行getwd()查看当前工作目录,确认该路径不是只读存储、网络挂载盘或系统受限目录。如果路径异常,执行setwd("合法的本地读写路径")切换工作目录后再运行代码。方案3:修复htmltools依赖冲突
部分旧版本htmltools的临时文件生成逻辑会触发该报错,运行以下命令关闭版本目录生成即可:
options(htmltools.dir.version = FALSE) ggplotly(plot)
- 方案4:更新依赖包版本
旧版本plotly存在临时目录处理的已知bug,将核心包更新到最新版本即可修复:
install.packages(c("ggplot2", "plotly", "htmltools"))
修复后完整可运行示例
library(dplyr) library(tidyr) library(ggplot2) library(plotly) # 预先设置临时目录 dir.create("~/plotly_cache", showWarnings = FALSE, recursive = TRUE) options(plotly.tempdir = "~/plotly_cache") options(htmltools.dir.version = FALSE) # 构造数据框 data = data.frame(date = seq.Date(as.Date("2021-08-21"),as.Date("2021-08-30"), "day"), first = rnorm(1:10), second = rnorm(1:10), third = rnorm(1:10)) # 转换为长格式 data_long <- data %>% gather(key = "index", value = "value", -date) # 绘图 plot <- data_long %>% ggplot(aes(x=date, y=value, color=index))+ labs(x="", y="value")+ geom_line()+ facet_wrap(~index) ggplotly(plot)
内容的提问来源于stack exchange,提问作者Golan Badichi
相关产品推荐
相关产品推荐

