如何解决从 R 到 reticulate 使用 python 的 plotnine 创建绘图
作为 R 用户,我正在学习通过 reticulate
在 R 中合并 python 命令,我尝试使用 R 中的 plotnine
包绘制图形,但它返回以下错误,有人可以帮忙吗?
library(reticulate)
library(ggplot2)
pd <- import('pandas',as='pd',convert=FALSE)
p9 <- import('plotnine')
mpg_py <- r_to_py(mpg,convert=FALSE)
mpg_pd <- pd$DataFrame(data=mpg_py)
p9$ggplot(data=mpg_pd,p9$aes(x='displ',y='cty'))
# Error in py_call_impl(callable,dots$args,dots$keywords) :
# AttributeError: 'nonetype' object has no attribute 'f_locals'
解决方法
this 问题的答案为我指明了解决此错误的有希望的途径。该错误似乎是由处理 plotnine 的命名空间/范围的 patsy
包中的问题引起的。默认情况下,plotnine.ggplot
构造函数会创建一个环境以了解从何处获取绘图数据和美学。因此,根据链接的答案改编,这里有一个潜在的解决方案,我们导入 patsy
包并使用 ggplot 函数中的 environment
参数来传递评估环境 (docs)。
library(reticulate)
library(ggplot2)
pd = import('pandas',convert=F)
p9 = import('plotnine')
# new imports
patsy = import('patsy')
# import to be able to show in RStudio (see issue here: https://github.com/rstudio/rstudio/issues/4978)
matplotlib = import('matplotlib')
matplotlib$use('tkAgg')
plt = import('matplotlib.pyplot')
mpg_py <- r_to_py(mpg,convert=FALSE)
mpg_pd <- pd$DataFrame(data=mpg_py)
plot_py = p9$ggplot(mpg_pd,p9$aes(x='displ',y='cty'),# new code (-1 was the only value that didn't throw an error)
environment = patsy$EvalEnvironment$capture(eval_env=as.integer(-1)))
print(class(plot_py)) # "plotnine.ggplot.ggplot" "python.builtin.object"
# Actually show the plot
plot_py
plt$show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。