You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:30:03