首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python的plotnine从R到网格化创建绘图

使用python的plotnine从R到网格化创建绘图
EN

Stack Overflow用户
提问于 2020-12-29 13:52:19
回答 1查看 123关注 0票数 0

作为一名R用户,我正在学习通过reticulate在R中整合python命令,我尝试在R中使用plotnine包绘制图形,但它返回了以下错误,有人能帮助我吗?

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

发布于 2020-12-31 07:09:36

this问题的答案为我指明了一条解决这个错误的有希望的道路。该错误似乎是由于处理that的命名空间/范围的patsy包中的问题造成的。默认情况下,plotnine.ggplot构造器创建一个环境,以了解从何处获取绘图数据和美学效果。因此,根据链接的答案进行调整,这里是一个潜在的解决方案,其中我们导入patsy包,并使用environment函数中的environment参数传递评估环境(docs)。

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65487862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档