【问题标题】:Creating plot using plotnine of python from R through reticulate从R到网状使用python的plotnine创建绘图
【发布时间】:2020-12-29 05:52:19
【问题描述】:

作为 R 用户,我正在学习通过 reticulate 将 python 命令合并到 R 中,我尝试使用 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'

【问题讨论】:

    标签: reticulate plotnine


    【解决方案1】:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多