
本文详解如何通过 reticulate 包在纯 r 脚本中调用 python pandas 的 `plot.scatter()` 方法绘制散点图,涵盖数据传递、python 环境执行及图形显示全流程。
要在 R 环境中直接调用 pandas 的绘图功能(而非借助 ggplot2 或 R 原生绘图系统),关键在于:将 R 数据框安全、准确地转换为 Python pandas DataFrame,并在 Python 运行时环境中执行原生 pandas 绘图语句。reticulate 提供了 r_to_py() 和 py_run_string() 两个核心函数来完成这一桥接。
以下是完整、可运行的 R 脚本示例(适用于 .R 文件,非 R Markdown):
library(reticulate)
# 导入必要 Python 模块
pd <- import("pandas")
plt <- import("matplotlib.pyplot")
# 构建 R 数据框(注意:列名需为合法 Python 标识符,避免空格或特殊字符)
df <- data.frame(
col1 = c(1, 2, 3, 4, 5),
col2 = c(6, 7, 8, 9, 10)
)
# 将 R 数据框转换为 Python pandas DataFrame
df_python <- r_to_py(df)
# 在 Python 环境中执行绘图命令(使用 r. 前缀访问 R 传入的对象)
py_run_string("
import matplotlib
matplotlib.use('Agg') # 避免无 GUI 环境报错(如服务器、Rscript)
python_plot = r.df_python.plot.scatter(x='col1', y='col2', alpha=0.3, figsize=(6, 4))
plt.title('Scatter Plot via pandas in R')
")
# 显示图形(需确保 matplotlib 后端支持显示;若在无界面环境,建议保存为文件)
plt$show()⚠️ 重要注意事项:
ReportPlust意在打造一套精美的数据报表模板,里面高度封装日历组件、表格组件、排行榜组件、条形进度条组件、文本块组件以及ucharts的多个图表组件,用户只需要按照虚拟数据的格式,传特定数据即可方便、快捷地打造出属于自己的报表页面。该小程序主要使用了ucharts和wyb-table两插件实现的数据报表功能。 特点使用的是uni-app中最受欢迎的图表uCharts插件完成图表展示,该插件
- r. 前缀是关键:r.df_python 表示 Python 环境中对 R 变量 df_python 的引用,不可省略或误写为 df_python(否则 Python 会报 NameError)。
-
后端兼容性:在无图形界面的环境(如 Linux 服务器、Rscript 批处理)中,plt$show() 可能失败。推荐添加 matplotlib.use('Agg') 并改用 plt$savefig("plot.png") 保存图像:
py_run_string(" plt.savefig('scatter_from_pandas.png', dpi=300, bbox_inches='tight') ") - 数据类型一致性:r_to_py() 通常能正确推断数值型和字符型,但对因子(factor)、时间类(POSIXct)等需预处理(如 as.character() 或 as.numeric()),否则可能在 Python 中转为 object 类型导致绘图异常。
- 依赖安装:确保 Python 环境已安装 pandas 和 matplotlib(可通过 reticulate::py_install(c("pandas", "matplotlib")) 自动安装)。
✅ 总结:该方案实现了 R 与 pandas 绘图能力的无缝集成——无需切换语言环境,不依赖 R Markdown 渲染机制,完全满足“在 .R 脚本中调用 pandas 函数”的工程化需求。只要正确管理对象跨环境引用与图形后端,即可稳定复现 Python 原生可视化效果。









