ggplot2的geom_smooth函数异常?是函数问题还是系统问题?
问题描述
一直使用机构的R/RStudio虚拟计算版本,之前用ggplot2从未出现问题,但从今日起,绘制包含geom_smooth的图形时,拟合线完全错误。即使运行官方示例代码,问题仍复现:
require(tidyverse) ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(method = lm, se = FALSE)

当前环境版本:R 4.3.1,RStudio 2023.6.1.524,ggplot2 3.4.3。
编辑1:附上sessionInfo()输出:
R version 4.3.1 (2023-06-16) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 20.04.6 LTS Matrix products: default BLAS/LAPACK: /opt/OpenBLAS/lib/libopenblasp-r0.3.3.so; LAPACK version 3.8.0 locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 [6] LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C time zone: America/Chicago tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] ggprism_1.0.4 neuroCombat_1.0.13 broom_1.0.5 lubridate_1.9.2 forcats_1.0.0 stringr_1.5.0 dplyr_1.1.2 [8] purrr_1.0.2 readr_2.1.4 tidyr_1.3.0 tibble_3.2.1 ggplot2_3.4.3 tidyverse_2.0.0 emmeans_1.8.8 loaded via a namespace (and not attached): [1] tidyselect_1.2.0 farver_2.1.1 fastmap_1.1.1 TH.data_1.1-2 digest_0.6.33 rpart_4.1.19 [7] estimability_1.4.1 timechange_0.2.0 lifecycle_1.0.3 cluster_2.1.4 survival_3.5-5 magrittr_2.0.3 [13] compiler_4.3.1 rlang_1.1.1 Hmisc_5.1-0 tools_4.3.1 utf8_1.2.3 data.table_1.14.8 [19] knitr_1.43 labeling_0.4.2 htmlwidgets_1.6.2 plyr_1.8.8 multcomp_1.4-25 abind_1.4-5 [25] BiocParallel_1.34.2 foreign_0.8-84 withr_2.5.0 nnet_7.3-19 grid_4.3.1 googledrive_2.1.1 [31] fansi_1.0.4 xtable_1.8-4 colorspace_2.1-0 scales_1.2.1 MASS_7.3-60 cli_3.6.1 [37] mvtnorm_1.2-3 rmarkdown_2.24 generics_0.1.3 rstudioapi_0.15.0 modelr_0.1.11 tzdb_0.4.0 [43] DBI_1.1.3 splines_4.3.1 parallel_4.3.1 cellranger_1.1.0 matrixStats_1.0.0 base64enc_0.1-3 [49] vctrs_0.6.3 Matrix_1.6-1 sandwich_3.0-2 carData_3.0-5 car_3.1-2 hms_1.1.3 [55] rstatix_0.7.2 Formula_1.2-5 htmlTable_2.4.1 glue_1.6.2 codetools_0.2-19 stringi_1.7.12 [61] gtable_0.3.3 sensemakr_0.1.4 munsell_0.5.0 pillar_1.9.0 htmltools_0.5.6 R6_2.5.1 [67] dbplyr_2.3.3 evaluate_0.21 lattice_0.21-8 haven_2.5.3 backports_1.4.1 googlesheets4_1.1.1 [73] gargle_1.5.2 Rcpp_1.0.11 nlme_3.1-162 gridExtra_2.3 checkmate_2.2.0 mgcv_1.8-42 [79] xfun_0.40 fs_1.6.3 zoo_1.8-12 pkgconfig_2.0.3
可能原因与修复方案
从环境信息和问题表现来看,核心原因大概率是BLAS/LAPACK库的兼容性问题——你当前使用的OpenBLAS 0.3.3版本与R 4.3.x结合时,可能导致线性回归计算异常,进而让geom_smooth(method=lm)的拟合线出错。
可以按以下步骤尝试修复:
- 临时切换R使用内置BLAS/LAPACK
在R中运行以下代码,重启R后再测试绘图:Sys.setenv("R_USE_BLAS" = "R") Sys.setenv("R_USE_LAPACK" = "R") - 升级OpenBLAS版本
联系机构虚拟计算环境管理员,将OpenBLAS升级到0.3.20以上版本,新版本修复了不少与R 4.x的兼容性问题。 - 排除第三方包干扰
先卸载ggprism包再测试,部分ggplot2扩展包可能干扰geom_smooth的计算逻辑:remove.packages("ggprism") # 重启R后运行示例代码 - 重装ggplot2及依赖
如果以上方法无效,完全卸载并重装ggplot2和tidyverse:remove.packages(c("ggplot2", "tidyverse")) install.packages("tidyverse", dependencies = TRUE)
另外,可先单独运行线性回归验证计算是否正常:
model <- lm(hwy ~ displ, data = mpg) summary(model)
如果输出的系数明显不合理(比如斜率为正),即可确认是线性代数库问题,优先处理BLAS/LAPACK配置。
内容的提问来源于stack exchange,提问作者GH28
相关产品推荐
相关产品推荐

