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

 更新时间:2026年06月22日 08:48:38   作者:一眉师傅  
这篇文章给大家介绍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-15,R 4.1.3 稳定期):

options(repos = c(CRAN = "https://cran.microsoft.com/snapshot/2022-08-15/"))

②直接安装 ggstatsplot、ggpmisc

,它会自动从该快照拉取兼容版本的依赖包(correlationdatawizardpatchwork 等全部是当时的老版本)

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: 无法打开URL'https://cran.microsoft.com/snapshot/2022-08-15/src/contrib/PACKAGES'即表示该快照或穿越路线失效需要更换快照路径

3.语言环境错误

可能有报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 32: invalid start byte

方法:在 Python 中强制 R 使用英文消息声明:

在导入 rpy2 后、任何绘图前,加一行:

ro.r('Sys.setenv(LANGUAGE="en")')

三、绘图测试

例 1:ggstatsplot —— 一行代码带统计检验的箱线图

R 独有优势:自动进行方差分析 / t 检验,并把 p 值、效应量、显著性标注直接画在图上,符合顶刊风格。Python 生态目前没有同等级别的库。

import pandas as pd
import rpy2.robjects as ro
ro.r('Sys.setenv(LANGUAGE="en")')
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, width=8, height=5, dpi=300)
''')
# 用你的默认图片查看器打开
import os
os.startfile("statsplot.png")

image

学习点:

  • 你不用自己写 scipy.stats.f_oneway,不用算效应量,不用手工在图上标 p 值。
  • ggstatsplot 自动完成统计推断 + 可视化,是沟通数据分析与论文插图的终极捷径。
  • 这种图在心理学、医学、教育学等需要展示统计结果的社会科学期刊中极受欢迎。

例 2:patchwork 拼图 —— 任意组合多张图,对齐出版级

R 独有优势:像搭积木一样用 |/+ 组合多幅 ggplot2 图,自动对齐坐标轴、图例、边距。Python 的 matplotlib 子图布局难以达到同样的精确度和美学。

import os
import pandas as pd
import rpy2.robjects as ro
ro.r('Sys.setenv(LANGUAGE="en")')
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, width=12, height=7, dpi=300)
''')
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(LANGUAGE="en")')
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, width=10, height=4, dpi=300)
''')
os.startfile("facet_annotation.png")

学习点:

  • stat_poly_eq 能自动计算回归方程和 R²,并以数学公式形式渲染在图上,这在你需要展示趋势线的统计结果时极为有用。
  • facet_wrap 配合 scales="free" 让每个分面都有自己的坐标尺度,这很贴合实际数据分析。
  • 这种“统计结果直接呈现在图形元素中”的能力,是 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, width=10, height=4, dpi=300)
'''
Rplot.PyRplot(Data=df,Rtext=Rtext)
os.startfile("Output.png")

②R绘图

import pandas as pd
import rpy2.robjects as ro
ro.r('Sys.setenv(LANGUAGE="en")')
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)')  # 用后即删,保持环境干净

到此这篇关于Python中绘制R的科研级可视化图的文章就介绍到这了,更多相关Python中绘制R的科研级可视化图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python初学者必须掌握的25个内置函数详解

    Python初学者必须掌握的25个内置函数详解

    这篇文章主要介绍了Python25个常用内置函数总结,本文罗列了数学相关 、功能相关、类型转换、字符串处理、序列处理函数等常用内置函数,需要的朋友可以参考下
    2021-09-09
  • python绘制发散型柱状图+误差阴影时间序列图+双坐标系时间序列图+绘制金字塔图

    python绘制发散型柱状图+误差阴影时间序列图+双坐标系时间序列图+绘制金字塔图

    这篇文章主要介绍了python绘制发散型柱状图+误差阴影时间序列图+双坐标系时间序列图+绘制金字塔图,详细的内容需要的小伙伴可以参考一下下面文章内容
    2022-08-08
  • 详解如何用python实现一个简单下载器的服务端和客户端

    详解如何用python实现一个简单下载器的服务端和客户端

    这篇文章主要介绍了详解如何用python实现一个简单下载器的服务端和客户端,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python字典取值全攻略之高效、简洁地获取字典值的多种技巧

    Python字典取值全攻略之高效、简洁地获取字典值的多种技巧

    这篇文章主要给大家介绍了关于Python字典取值全攻略之高效、简洁地获取字典值的多种技巧,dictionary(字典)是除列表以外Python之中最灵活的数据类型,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • python抓取文件夹的所有文件

    python抓取文件夹的所有文件

    这篇文章主要为大家详细介绍了python抓取文件夹的所有文件,包括子文件夹和子文件夹的文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 浅谈Python中重载isinstance继承关系的问题

    浅谈Python中重载isinstance继承关系的问题

    本篇文章主要介绍了浅谈Python中重载isinstance继承关系的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • python注册钉钉回调事件的实现

    python注册钉钉回调事件的实现

    钉钉有回调事件流程,本文主要介绍了python注册钉钉回调事件的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • python 微信好友特征数据分析及可视化

    python 微信好友特征数据分析及可视化

    这篇文章主要介绍了python 微信好友特征数据分析及可视化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 使用Python生成url短链接的方法

    使用Python生成url短链接的方法

    这篇文章主要介绍了使用Python生成url短链接的方法,短链接在如今在微博等社交网站中等是非常常见的功能,需要的朋友可以参考下
    2015-05-05
  • 详解Python修复遥感影像条带的两种方式

    详解Python修复遥感影像条带的两种方式

    这篇文章主要介绍了详解Python修复遥感影像条带的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论