[ESS] Displaying plots in Emacs

Michael Lawrence |@wrence@m|ch@e| @end|ng |rom gene@com
Tue May 19 06:28:47 CEST 2015


On Mon, May 18, 2015 at 8:58 PM, Vitalie Spinu <spinuvit using gmail.com> wrote:

>
> I don't think there will ever be image support as part of ESS. ESS just
> cannot handle that sort of complexity. If image handling is ever added
> to it it's bound to be an ad hoc and patchy solution.
>
> On the other hand nREPL will work from the start with inline images,
> that's sort of things that MPI's are perfect for. "evaluate" pacakge
> already handles image recording quite well. So, basic pieces are there,
> someone has to put them together.
>
>
How far along is nREPL?


> I am 90% of the time on remotes and each time I need to plot something
> complex I have to take a coffee break. If something, like saving to
> files, works only on local machines it's not even worth trying
> implementing IMO.
>

Won't files just work via tramp? Coupled with change notifications, files
could work fairly seamlessly.


>
>   Vitalie
>
>
>  >>> Ista Zahn on Mon, 18 May 2015 19:42:02 -0400 wrote:
>
>  > On Mon, May 18, 2015 at 7:22 PM, Michael Lawrence
>  > <lawrence.michael using gene.com> wrote:
>  >> Hardest part is probably getting the data from a potentially remote R
>  >> session to Emacs. The Vitalie's nREPL package sounds like a potential
>  >> solution, if it were mature enough.
>
>  > I think it would be worth doing even if it only (perhaps initially)
>  > works when R is running locally. This would be a very useful feature,
>  > and I'd hate to see it indefinitely put off because of the difficulty
>  > of supporting remote sessions.
>
>  > On another note: I don't think the pdf-tools package Titus suggested
>  > works on Windows. I don't personally care about that, but perhaps it
>  > is something to keep in mind.
>
>  > Best,
>  > Ista
>
>  >>
>  >> On Mon, May 18, 2015 at 3:55 PM, Martin Maechler <
> maechler using stat.math.ethz.ch
>  >>> wrote:
>  >>
>  >>> On Mon, May 18, 2015 at 8:01 PM, Titus von der Malsburg
>  >>> <malsburg using posteo.de> wrote:
>  >>> >
>  >>> > On 2015-05-15 Fri 13:48, Michael Lawrence wrote:
>  >>> >> There was a long discussion on this here:
>  >>> >> https://stat.ethz.ch/pipermail/ess-help/2013-November/009559.html.>>
> >>
>  >>> >> Here is one approach. The R graphics engine calls Mode(1) on the
> device
>  >>> >> whenever it is "finished" drawing (the engine might "finish"
> multiple
>  >>> times
>  >>> >> when generating a single plot). This allows e.g. buffered screen
>  >>> devices to
>  >>> >> flush their buffer. The file devices do not listen to that; they
> defer
>  >>> that
>  >>> >> until they are deactivated. In theory, the engine could execute an
> R
>  >>> >> callback at that point, and the callback would typically call
>  >>> recordPlot()
>  >>> >> to get the display list, and replay the plot on some other device
> (with
>  >>> the
>  >>> >> callback disabled). Would need to check the performance profile on
> that,
>  >>> >> i.e., how greedy R is about flushing.
>  >>> >>
>  >>> >> Ideally, the file devices would support connections, so we could
> stream
>  >>> the
>  >>> >> data as PDF or PNG to ESS, without touching the disk, which is
> tricky
>  >>> when
>  >>> >> running R remotely (would tramp help?). But Emacs would need a way
> to
>  >>> >> display an image from in-memory buffer. It sounds like pdf-tools
> might
>  >>> >> enable that for PDF.
>  >>> >>
>  >>> >> If people think this or something like it might work, I'll see
> about
>  >>> adding
>  >>> >> those features to R.
>  >>> >
>  >>> > Hi Michael, unfortunately I don’t know enough about the R side of
> things
>  >>> > to give you useful feedback on your proposal.  If there is any Elisp
>  >>> > hacking to do to make this work, let me know because there I might
> be
>  >>> > able to help.
>  >>> >
>  >>> >   Titus
>  >>>
>  >>> I can't promise any help ... but I find the principal idea really
> cool:
>  >>> a pdf connection to non-disc memory (instead of traditional disc based
>  >>> file)
>  >>> to which R would write and Emacs could display in a buffer.    Reallz
>  >>> something we could be proud of!
>  >>>
>  >>> Martin
>  >>>
>  >>> >
>  >>> >>
>  >>> >> Michael
>  >>> >>
>  >>> >> On Fri, May 15, 2015 at 12:30 PM, Titus von der Malsburg <
>  >>> malsburg using posteo.de
>  >>> >>> wrote:
>  >>> >>
>  >>> >>>
>  >>> >>> One feature that I really miss when developing R code with ESS is
> the
>  >>> >>> ability to display plots in Emacs.  The free-floating plots
> generated
>  >>> >>> R’s plotting functions are really annoying because they pop up in
>  >>> random
>  >>> >>> positions and almost always cover stuff that I need to see.
>  >>> >>>
>  >>> >>> Last time I checked, people said that the only way to have plots
> in
>  >>> >>> Emacs windows would be use the XWidget branch of Emacs which
> allows
>  >>> >>> embedding of GTK widgets into Emacs buffers.  This may be a neat
>  >>> >>> solution (although R doesn’t seem to use GTK) but it’s not going
> to
>  >>> >>> happen anytime soon because the XWidget branch is pretty dead
> (last
>  >>> >>> commit in Sept 2013).
>  >>> >>>
>  >>> >>> Luckily, there may be a much simpler solution: Emacs has a
> fantastic
>  >>> >>> support for viewing PDF files via the pdf-tools package [1].  (For
>  >>> >>> people who don’t know pdf-tools, it allows you to isearch PDF
> files and
>  >>> >>> to create and edit annotations that a compatible with those
> created by
>  >>> >>> Adobe tools.  Amazing!)  So one solution is to plot into a PDF
> file and
>  >>> >>> to display that PDF in a separate Emacs buffer window.
>  >>> >>>
>  >>> >>> This has the potential to be really convenient.  For example, we
> can
>  >>> >>> activate auto-revert-mode in the buffer displaying the PDF such
> that
>  >>> the
>  >>> >>> PDF is automatically refreshed when a new plot is written to the
> PDF
>  >>> >>> file.  Also pdf-tools can scale the plot to fill the window.  This
>  >>> means
>  >>> >>> that we can resize the window and the size of the plot is
> dynamically
>  >>> >>> adapted – no need to replot.
>  >>> >>>
>  >>> >>> So far, this solution works really nicely and certainly much
> better
>  >>> than
>  >>> >>> the x11 windows created by default.  However, there are two
> things that
>  >>> >>> are suboptimal:
>  >>> >>>
>  >>> >>> 1.) It is annoying that I have to type and execute:
>  >>> >>>
>  >>> >>>   pdf()
>  >>> >>>   plot(1:10)
>  >>> >>>   dev.off()
>  >>> >>>
>  >>> >>> instead of just:
>  >>> >>>
>  >>> >>>   plot(1:10)
>  >>> >>>
>  >>> >>> Is there a way to use the PDF renderer as the default device
> instead of
>  >>> >>> x11?  If not (which is likely), what else can be done to free the
> user
>  >>> >>> >From having to generate the PDFs manually?  Is there perhaps a
> clever
>  >>> >>> way to wrap the plotting functions?  Something involving
> recordPlot and
>  >>> >>> replayPlot?
>  >>> >>>
>  >>> >>> 2.) It would be nice if plotting would automatically open a new
> Emacs
>  >>> >>> buffer displaying the result.  This could perhaps be addressed by
>  >>> >>> scanning each executed command with a regular expression,
> something
>  >>> like
>  >>> >>> (but realistically much more complex than):
>  >>> >>>
>  >>> >>>   (defvar ess-plot-command-regexp "\\bplot(")
>  >>> >>>
>  >>> >>> If it matches, ESS could open the PDF in a new buffer window or
> prompt
>  >>> >>> the user asking whether the PDF should be opened.  Is there
> already
>  >>> >>> infrastructure in ESS for scanning R commands like that?
>  >>> >>>
>  >>> >>> An alternative might be to use gfilenotify/inotify/w32notify to
> inform
>  >>> >>> ESS every time the target PDF changes.  ESS could then prompt the
> user
>  >>> >>> asking whether the plot should be displayed.  This is cleaner
> because
>  >>> >>> detecting plotting commands accurately is at least difficult.
> However
>  >>> >>> the notify solution requires that ESS knows the PDF containing
> the plot
>  >>> >>> but this could be achieved by whatever the solution for issue 1
> is.
>  >>> >>>
>  >>> >>> What are your thoughts on this?  Does the PDF approach sound like
> the
>  >>> >>> way to go?  Any ideas regarding the two issues above?  It would be
>  >>> great
>  >>> >>> to get some feedback on this.
>  >>> >>>
>  >>> >>>   Titus
>  >>> >>>
>  >>> >>> [1] https://github.com/politza/pdf-tools>> >>>
>  >>> >>> ______________________________________________
>  >>> >>> ESS-help using r-project.org mailing list
>  >>> >>> https://stat.ethz.ch/mailman/listinfo/ess-help>> >>>
>  >>> >
>  >>>
>  >>
>  >> [[alternative HTML version deleted]]
>  >>
>  >> ______________________________________________
>  >> ESS-help using r-project.org mailing list
>  >> https://stat.ethz.ch/mailman/listinfo/ess-help
>
>  > ______________________________________________
>  > ESS-help using r-project.org mailing list
>  > https://stat.ethz.ch/mailman/listinfo/ess-help
>

	[[alternative HTML version deleted]]




More information about the ESS-help mailing list