Re: [R] Speed up plotting to MSWindows graphics window

From: Uwe Ligges <>
Date: Wed, 27 Apr 2011 13:32:09 +0200

On 27.04.2011 12:56, Duncan Murdoch wrote:
> Jonathan Gabris wrote:
>> Hello,
>> I am working on a project analysing the performance of motor-vehicles
>> through messages logged over a CAN bus.
>> I am using R 2.12 on Windows XP and 7
>> I am currently plotting the data in R, overlaying 5 or more plots of
>> data, logged at 1kHz, (using plot.ts() and par(new = TRUE)).
>> The aim is to be able to pan, zoom in and out and get values from the
>> plotted graph using a custom Qt interface that is used as a front end
>> to R.exe (all this works).
>> The plot is drawn by R directly to the windows graphic device.
>> The data is imported from a .csv file (typically around 100MB) to a
>> matrix.
>> (timestamp, message ID, byte0, byte1, ..., byte7)
>> I then separate this matrix into several by message ID (dimensions are
>> in the order of 8cols, 10^6 rows)
>> The panning is done by redrawing the plots, shifted by a small amount.
>> So as to view a window of data from a second to a minute long that can
>> travel the length of the logged data.
>> My problem is that, the redrawing of the plots whilst panning is too
>> slow when dealing with this much data.
>> i.e.: I can see the last graphs being drawn to the screen in the
>> half-second following the view change.
>> I need a fluid change from one view to the next.
>> My question is this:
>> Are there ways to speed up the plotting on the MSWindows display?
>> By reducing plotted point densities to *sensible* values?
>> Using something other than plot.ts() - is the lattice package faster?
>> I don't need publication quality plots, they can be rougher...
> I don't think there are any ways to plot in the standard device that are
> significantly faster than what you are doing if you want to see the
> updates. (I think it would be substantially faster if you hid the
> graphics window during the updates, but that won't suit you.)
> I'd suggest plotting a subset of the data during the updates, then plot
> the full dataset when it stops moving. For example, only plot a few
> hundred points, even spaced through the time series.

... and it highly depends on the data what can be improved. Example: For signals essential consisting of sine functions (i.e. harmonic signals), I am using a little dirty trick in the tuneR package, but that makes the assumption of having a high frequency sample of a harmonic signal without too much noise.

Uwe Ligges

> Duncan Murdoch
>> I have tried:
>> -Using matrices instead of dataframes - (works for calculations but
>> not enough for plots)
>> -increasing the max usable memory (max-mem-size) - (no change)
>> -increasing the size of the pointer protection stack (max-ppsize) -
>> (no change)
>> -deleting the unnecessary leftover matrices - (no change)
>> -I can't use lines() instead of plot() because of the very different
>> scales (rpm-10000, flags -1to3)
>> I am going to do some resampling of the logged data to reduce the
>> vector sizes.
>> (removal of *less* important data and use of window.ts())
>> But I am currently running out of ideas...
>> So if sombody could point out something, I would be greatfull.
>> Thanks,
>> Jonathan Gabris
>> ______________________________________________
>> mailing list
>> PLEASE do read the posting guide
>> and provide commented, minimal, self-contained, reproducible code.
> ______________________________________________
> mailing list
> PLEASE do read the posting guide
> and provide commented, minimal, self-contained, reproducible code. mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Wed 27 Apr 2011 - 11:39:13 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 27 Apr 2011 - 12:10:34 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive