Функция plot ggplot2 возвращает объект NoneType с rpy2 - PullRequest
0 голосов
/ 21 января 2020

У меня есть простой скрипт, который создает график рассеяния ggplot2, используя rpy2. Однако фигура не отображается. Возвращенный объект графика - NoneType. Вот сценарий:

from rpy2 import robjects
import rpy2.robjects as ro
from rpy2.robjects.lib import grid
from rpy2.robjects.packages import importr, data
import rpy2.robjects.lib.ggplot2 as ggplot2

rprint = robjects.globalenv.find("print")
stats = importr('stats')
grdevices = importr('grDevices')
base = importr('base')
datasets = importr('datasets')
grid.activate()

mtcars = data(datasets).fetch('mtcars')['mtcars']

gp = ggplot2.ggplot(mtcars)    
pp = gp + ggplot2.aes_string(x='wt', y='mpg') + \
     ggplot2.geom_point()
print('type(pp):',type(pp))
fig = pp.plot()
print('type(fig):',type(fig))
pp.plot()

Я могу сохранить рисунок в файл png, поэтому большая часть кода работает. При устранении этой проблемы я пытался использовать несколько версий rpy2 с различными результатами:

  1. Версии 3.0.1 и 3.0.2 - на рисунке мигает, происходит сбой программы и объект графика имеет тип NoneType
  2. Версия 3.0.3 - мигает пустой холст, происходит сбой программы и объект графика NoneType
  3. Версии 3.0.4 и 3.0.5 - мигает рисунок, происходит сбой программы и объект графика NoneType
  4. Версии 3.1.0 и 3.2.0 - рисунок не отображается, а объект графика имеет тип NoneType
  5. Версии с 3.2.1 по 3.2.4 - rpy2 не удается установить с pip

Я также прочитал ветку здесь и перешел по предложенным там ссылкам, но я не смог адаптировать предложенные действия к моей проблеме.

Для полноты здесь приведены подробные сведения о Я использую среду: Python 3.7.5, R версия 3.6.0, MacOS Catalina Версия 10.15.2.

1 Ответ

0 голосов
/ 22 января 2020

Более подробное описание «не удается установить» поможет угадать, что происходит с Каталиной. На Github Actions последняя версия OSX - High Sierra (10.13), и там работают и установки, и тесты: https://github.com/rpy2/rpy2/runs/378570566

В противном случае ваш код, похоже, не использует grdevices (или любой другой пакет R, импортированный через importr()). R может использовать графические устройства "stati c" (например, файл PNG) или "интерактивные" графические устройства (например, X11, Quartz на OSX). См. https://rpy2.github.io/doc/v3.2.x/html/graphics.html#graphical -устройства для получения дополнительной информации.

Для обновления события l oop могут потребоваться интерактивные устройства (см. https://rpy2.github.io/doc/v3.2.x/html/interactive.html#r -event-l oop), хотя программа cra sh не ожидается, когда она этого не делает.

Вы можете попытаться определить, какое графическое устройство открыто по умолчанию в вашей системе (если оно еще не открыто). R откроет устройство типа по умолчанию) в качестве первого шага к выявлению проблемы.

...