Python中绘制R的科研级可视化图

发布时间:2026/6/30 4:37:02

Python中绘制R的科研级可视化图 重要的桥接Python库rpy2# pip install rpy2 我的R语言版本为 4.1.3 需要rpy2 3.5.X版本去对应二、确保R环境确保你电脑已安装 R并在 R 里装好相关包# install.packages(c(ggplot2, ggstatsplot, patchwork,ggpmisc))注意这里可能遇到几个问题1.rpy2同python同R的版本兼容问题可能有报错ffi.error: symbol R_getVar not found in library E:\R\Rlangrage\R-4.1.3\bin\x64\R.dll: error 0x7f此时需要调整rpy2版本使得三方同时适配如Python 3.9 R 4.1.3 可以加载 rpy2 3.5.x 版本2.R中没有相关的库/包可能有报错rpy2.robjects.packages.PackageNotInstalledError: The R package ggplot2 is not installed.方法指定版本下载install.packages(https://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_3.4.2.tar.gz, repos NULL, type source)可能有报错rpy2.rinterface_lib.embedded.RRuntimeError: Error in library(ggstatsplot) : there is no package called ggstatsplot方法安装兼容 R 4.1.3 的旧版ggstatsplot一般方法较为困难这里采用屏幕快照穿越回4.1.3适用的当年进行下载①打开 R 4.1.3 控制台先设置镜像为 MRAN 快照这里选择 2022-08-15R 4.1.3 稳定期options(repos c(CRAN https://cran.microsoft.com/snapshot/2022-08-15/))②直接安装ggstatsplot、ggpmisc它会自动从该快照拉取兼容版本的依赖包correlation,datawizard,patchwork等全部是当时的老版本install.packages(ggstatsplot)③如果提示需要 Rtools 编译Windows 下极少发生快照提供二进制就先装 Rtools40安装时勾选“Add Rtools to system PATH”。备用如果 MRAN 快照连接失败可改用其它历史镜像例如options(repos c(CRAN https://packagemanager.rstudio.com/cran/__linux__/focal/2022-08-15))options(repos c(CRAN https://packagemanager.posit.co/cran/2022-08-15))当报错Warning: unable to access index for repository https://cran.microsoft.com/snapshot/2022-08-15/src/contrib: 无法打开URLhttps://cran.microsoft.com/snapshot/2022-08-15/src/contrib/PACKAGES即表示该快照或穿越路线失效需要更换快照路径3.语言环境错误可能有报错UnicodeDecodeError: utf-8 codec cant decode byte 0xb2 in position 32: invalid start byte方法在 Python 中强制 R 使用英文消息声明在导入rpy2后、任何绘图前加一行ro.r(Sys.setenv(LANGUAGEen))三、绘图测试例 1ggstatsplot—— 一行代码带统计检验的箱线图R 独有优势自动进行方差分析 / t 检验并把 p 值、效应量、显著性标注直接画在图上符合顶刊风格。Python 生态目前没有同等级别的库。import pandas as pd import rpy2.robjects as ro ro.r(Sys.setenv(LANGUAGEen)) from rpy2.robjects import pandas2ri from rpy2.robjects.packages import importr pandas2ri.activate() # 生成一些三组数据 df pd.DataFrame({ score: [85, 90, 88, 92, 87, 70, 75, 72, 68, 71, 55, 60, 58, 62, 59], method: [A]*5 [B]*5 [C]*5 }) ro.globalenv[df] df ro.r( library(ggplot2) library(ggstatsplot) p - ggbetweenstats( data df, x method, y score, type parametric, title Comparison of Teaching Methods, caption Auto: F-value, p-value, eta^2 ) ggsave(statsplot.png, p, width8, height5, dpi300) ) # 用你的默认图片查看器打开 import os os.startfile(statsplot.png)学习点你不用自己写scipy.stats.f_oneway不用算效应量不用手工在图上标 p 值。ggstatsplot自动完成统计推断 可视化是沟通数据分析与论文插图的终极捷径。这种图在心理学、医学、教育学等需要展示统计结果的社会科学期刊中极受欢迎。例 2patchwork拼图 —— 任意组合多张图对齐出版级R 独有优势像搭积木一样用|、/、组合多幅ggplot2图自动对齐坐标轴、图例、边距。Python 的matplotlib子图布局难以达到同样的精确度和美学。import os import pandas as pd import rpy2.robjects as ro ro.r(Sys.setenv(LANGUAGEen)) from rpy2.robjects import pandas2ri pandas2ri.activate() # 直接拿 ggplot2 里的 mpg 数据 ro.globalenv[mpg] ro.r(ggplot2::mpg) ro.r( library(ggplot2) library(patchwork) p1 - ggplot(mpg, aes(displ, hwy)) geom_point(aes(color class)) geom_smooth(se FALSE) theme_minimal() p2 - ggplot(mpg, aes(class)) geom_bar(fill steelblue) coord_flip() theme_minimal() p3 - ggplot(mpg, aes(cty, hwy)) geom_point(alpha 0.3) facet_wrap(~ year) theme_minimal() combined - (p1 / p2) | p3 plot_annotation(title 汽车数据多维度展示, tag_levels A) ggsave(patchwork_demo.png, combined, width12, height7, dpi300) ) os.startfile(patchwork_demo.png)学习点patchwork的布局语法极其直观(A / B) | C表示 A 在 B 上面整列再与 C 左右排列。自动对齐坐标轴、图例位置输出图片可直接用于论文无需后期手动微调。这种“写代码像设计版面”的体验是目前matplotlib的subplot2grid等难以企及的。例 3高级ggplot2分面 统计变换 自定义标注R 独有优势分面时在每个子图上自动计算并标注相关系数、回归线使用after_stat等先进统计变换Python 的plotnine只能完成基础分面。import os import pandas as pd import rpy2.robjects as ro ro.r(Sys.setenv(LANGUAGEen)) from rpy2.robjects import pandas2ri pandas2ri.activate() # 生成模拟数据 df pd.DataFrame({ x: [1,2,3,4,5]*3, y: [2,4,6,8,10, 1,4,7,10,13, 3,5,7,9,11], group: [线性A]*5 [线性B]*5 [线性C]*5 }) ro.globalenv[df] df ro.r( library(ggplot2) library(ggpmisc) # 提供 geom_text_npc 等标注函数 p - ggplot(df, aes(x, y, color group)) geom_point(size 3) geom_smooth(method lm, se TRUE, alpha 0.2) facet_wrap(~ group, scales free) stat_poly_eq( aes(label paste(..eq.label.., ..rr.label.., sep ~~~)), formula y ~ x, parse TRUE ) theme_minimal(base_size 14) labs(title 分面自动标注回归方程和 R²) ggsave(facet_annotation.png, p, width10, height4, dpi300) ) os.startfile(facet_annotation.png)学习点stat_poly_eq能自动计算回归方程和 R²并以数学公式形式渲染在图上这在你需要展示趋势线的统计结果时极为有用。facet_wrap配合scalesfree让每个分面都有自己的坐标尺度这很贴合实际数据分析。这种“统计结果直接呈现在图形元素中”的能力是 R 可视化最深邃的美学之一。由此可以展开Python和R的结合Python解决工程代码数学逻辑R专项负责可视化部分实现两者结合。四、绘图包装①Python给数据dataframe格式mport os import pandas as pd import Rplot # 生成模拟数据 df pd.DataFrame({ x: [1,2,3,4,5]*3, y: [2,4,6,8,10, 1,4,7,10,13, 3,5,7,9,11], group: [线性A]*5 [线性B]*5 [线性C]*5 }) Rtext library(ggplot2) library(ggpmisc) # 提供 geom_text_npc 等标注函数 p - ggplot(Data, aes(x, y, color group)) geom_point(size 3) geom_smooth(method lm, se TRUE, alpha 0.2) facet_wrap(~ group, scales free) stat_poly_eq( aes(label paste(..eq.label.., ..rr.label.., sep ~~~)), formula y ~ x, parse TRUE ) theme_minimal(base_size 14) labs(title 分面自动标注回归方程和 R²) ggsave(Output.png, p, width10, height4, dpi300) Rplot.PyRplot(Datadf,RtextRtext) os.startfile(Output.png)②R绘图import pandas as pd import rpy2.robjects as ro ro.r(Sys.setenv(LANGUAGEen)) from rpy2.robjects import pandas2ri pandas2ri.activate() ro.globalenv[mpg] ro.r(ggplot2::mpg) def PyRplot(Data,Rtext): if not isinstance(Data, pd.DataFrame): data pd.DataFrame(Data) ro.globalenv[Data] Data ro.r(Rtext) ro.r(rm(Data)) # 用后即删保持环境干净

相关新闻