I'm using RPy2 to make some plots. The plot shows up but the X11 window immediately disappears.
All I'm typing is the following, where CCFS is a data matrix
import rpy2.robjects as robjects
r = robjects.r
pca = r.princomp(CCFS)
r.plot(pca,main="Eigenvalues")
r.biplot(pca,main="biplot")
r['dev.off']() #*EDIT* the problem persists even if I remove this line.
Am I failing to include something? I know that there is something to plot because princomp returns a ListVector that isn't null.
Add
to the end of the script to prevent the program from ending until the user presses Enter.
As Zack pointed it out calling
dev.off()
on interactive graphical devices will just cause the device to close (and what it displays to disappear). On the other hand, closing non-interactive devices is mostly required before the plot can be checked (See rpy2's documentation on graphical devices).I am guessing that your Python code is called as a standalone program / script rather than part of an interactive Python session. In other words I am suspecting that you are having something like
python myscript.py
in a shell (the content ofmyscript.py
being your code above); when the script ends the embedded R is obviously terminated, taking with it the interactive plot. This is likely also what Zack is thinking. Trypython -i myscript.py
, and then once in the Python consoleimport sys; sys.exit(0)
to see that exiting Python means closing R interactive devices.