Dear all,
I have a dataset of spectral measurements of sunlight. One row for each
different observation, one column for each spectral channel.
I would like to select the spectral curves drawn with matplot() (I only
know matplot() as a way of easily drawing them) with the help of the
mouse and extract their row indexes :
a=url("http://ekumen.homelinux.net/spectra.RData")
load(a)
matplot(lbd2, t(mySpectra), type="l",xlab="Wavelength [nm]",ylab="Radiance")
I was hoping that identify() would work on such a graphic but
unfortunately it does not. I tried to the "identify" function of the
package playwith(), but still the same problem.
I think I will have to write a function that does the job. But before
that, I would like to have your opinions. What would be the easiest way
of accomplishing this task?
Thank you very much
Best regards
servet
Selecting with mouse the lines drawn by matplot()
2 messages · Servet Ahmet Çizmeli, Uwe Ligges
On 25.05.2012 22:52, servet cizmeli wrote:
Dear all,
I have a dataset of spectral measurements of sunlight. One row for each
different observation, one column for each spectral channel.
I would like to select the spectral curves drawn with matplot() (I only
know matplot() as a way of easily drawing them) with the help of the
mouse and extract their row indexes :
a=url("http://ekumen.homelinux.net/spectra.RData")
load(a)
matplot(lbd2, t(mySpectra), type="l",xlab="Wavelength
[nm]",ylab="Radiance")
I was hoping that identify() would work on such a graphic but
unfortunately it does not. I tried to the "identify" function of the
package playwith(), but still the same problem.
I think I will have to write a function that does the job. But before
that, I would like to have your opinions. What would be the easiest way
of accomplishing this task?
Write a little function that makes use of locator():
Take its x position and calculate (by interpolation) the y location of
all paths at this x position, then take the minimal distance.
The idea in quick an dirty:
mat_identify <- function(x, y, ...){
l <- locator(1)
if(all(x <= l$x) || all(x >= l$x))
stop("not within data range")
index <- max(which(x <= l$x))
f <- (l$x - x[index]) / diff(x[index+(0:1)])
yi <- f * (y[index+1,] - y[index,] ) + y[index,]
result <- which.min(abs(yi-l$y))
lines(x, y[,result], lwd=2, col="red")
text(l, label=rownames(y)[result])
result
}
matplot(lbd2, t(mySpectra), type="l",xlab="Wavelength [nm]",ylab="Radiance")
mat_identify(lbd2, t(mySpectra))
Best,
Uwe Ligges
Thank you very much Best regards servet
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.