Plotting the complex fft in 3D?
On 04/09/2008 4:44 PM, Oliver Bandel wrote:
Zitat von Duncan Murdoch <murdoch at stats.uwo.ca>:
Oliver Bandel wrote:
Hello, I'm new to R (using it since about two weeks), but absolutely a fan of it from the beginning on. :-) Best tool for working with data I found. :-) I tried using the fft() and other funcitons for analysing time series. What I would be glad to have, would be a convenient way to display the complex result of a fft in a way, that real and imaginary parts each use an axis for themselves, and the index of the resulting values use the third axe. When displaying this as a 3D->2D picture, it also would be nice, to change the view, like it can be done with persp(). Is there already a package or script for preparing the data of an fft to be displayed in this way?
I don't find this very enlightening, but here you go: x <- rnorm(1000) f <- fft(x) library(rgl) plot3d(1:length(f), Re(f), Im(f))
[...] Ok, this is a starting point. :-) It would be enlightening, if you have a timeseries that is not noise only, and if the plot would not use dots. So, using a timeseries that is derived from some data could be very interesting. But rnorm creates noise only, and not a deterministic signal. So the resulting fft values look quite boring ;-) Instead of dots, a line from the index-axis at Re=0, Im=0 to the value of the fft at that index should be drawn.
plot3d doesn't support that directly, but you could plot with type='n', then use segments3d to add the lines.
BTW: how to change the perspective? I did not found an angle-parameter for the plot3d()-function.
Just grab it with your mouse and drag. Alternatively, play3d(spin3d()) will spin it, or par3d(userMatrix=rotationMatrix(...)) for a fixed setting. Duncan Murdoch