R ggplot2与directlabels包‘eval错误’的临时解决方法问询
快速修复directlabels与新版ggplot2的兼容问题
这个报错我之前也碰到过!确实是新版ggplot2把底层的proto框架换成ggproto后,依赖旧系统的directlabels包找不到需要的eval函数了。给你几个快速可行的修复方案:
方案1:安装社区修复后的directlabels分支
有开发者已经针对ggproto做了兼容修复,直接从GitHub安装这个修复版本就行:
# 先装devtools(没装过的话) if (!require("devtools")) install.packages("devtools") # 安装适配ggproto的directlabels分支 devtools::install_github("tdhock/directlabels", ref = "ggproto")
装完重新加载包,再跑你的等高线标签代码应该就正常了。
方案2:临时补丁(不用重装包)
要是不想折腾重装,就在脚本开头加这段代码,手动给ggplot2的命名空间补上directlabels需要的eval函数:
# 先加载ggplot2 library(ggplot2) # 临时把eval函数放到ggplot2的命名空间里 assign("eval", eval, envir = asNamespace("ggplot2")) # 再加载directlabels library(directlabels)
这个方法能快速绕开报错,不用动已安装的包。
方案3:降级ggplot2到兼容版本(不推荐长期用)
如果上面两种都不行,你可以暂时降级ggplot2到还支持proto的旧版本(比如3.3.6):
# 先卸载当前版本 remove.packages("ggplot2") # 安装旧版本 install.packages("ggplot2", version = "3.3.6", repos = "http://cran.us.r-project.org")
不过这个方法不建议长期用,毕竟会错过ggplot2的新功能和bug修复。
可以用这个经典示例测试一下:
library(ggplot2) library(directlabels) df <- expand.grid(x=1:10, y=1:10) df$z <- df$x + df$y p <- ggplot(df, aes(x, y, z=z)) + geom_contour() direct.label(p)
用方案1或2处理后,这段代码应该就能正常生成带标签的等高线图啦。
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

