Dear R People, I would like to smooth some 3d lines, which consist of line segments specified by start and end 3d coordinates. These are experimentally derived from microscope images of neurons, so there is no sense in which one axis is any different from any other (predictor vs response).
I have tried doing repeated smoothing interpolation with smooth.splines (see below), but this doesn't behave that well with some of my data which can be multivalued with respect to x and is not a directly 3d approach since. Could anyone suggest a package which might have appropriate functionality or a link to read up about possible approaches? With many thanks for your help, Greg Jefferis. PS As an aside, wouldn't categorising the 1350 downloadable packages on CRAN according to their content make a nice exercise in applied statistical learning/visualisation? -- LineSmooth3d<-function(l){ lxy=smooth.spline(l[,1:2]) lxz=smooth.spline(l[,c(1,3)]) cbind(l[,1],predict(lxy,l[,1])$y,predict(lxz,l[,1])$y) } # First 2 segments of a neuron l=structure(c(2.240391, 5.629143, 8.140456, 9.94432, 12.295891, 13.457473, 15.170222, 17.758942, 18.290545, 20.334337, 22.027239, 23.263636, 24.24404, 26.234032, 27.411226, 29.369003, 30.806803, 32.68042, 35.012493, 37.436077, 40.567665, 46.615963, 49.906017, 57.803772, 62.236923, 63.849625, 131.309967, 129.133469, 127.194168, 125.517822, 123.464272, 121.037727, 118.98951, 116.41317, 114.511192, 111.733353, 108.64267, 106.416183, 103.347008, 100.653694, 98.72525, 96.918602, 95.4189, 94.231995, 92.493828, 91.070656, 88.901505, 86.535431, 86.055229, 86.209984, 86.143341, 86.368622, 9.116494, 10.510942, 12.17625, 14.124721, 17.23107, 21.285524, 24.150547, 26.97097, 29.702291, 32.635288, 35.791851, 39.013748, 41.252228, 42.638962, 44.100445, 45.742134, 47.191525, 49.838848, 51.361511, 52.929546, 55.789406, 60.742428, 61.489536, 60.880463, 61.653023, 61.472942), .Dim = c(26L, 3L), .Dimnames = list(NULL, c("X", "Y", "Z"))) l2=structure(list(X = c(63.849625, 63.710838, 64.202766, 64.650017, 64.965698, 64.609695, 64.352356), Y = c(86.368622, 83.420357, 80.972359, 79.352409, 77.604141, 76.094627, 74.800072), Z = c(61.472942, 62.381229, 62.161339, 63.138336, 64.076202, 65.080811, 68.487137 )), .Names = c("X", "Y", "Z"), row.names = c("26", "27", "28", "29", "30", "31", "32"), class = "data.frame") # install.packages('rgl') require(rgl) # First line OK rgl.linestrips(l) rgl.linestrips(LineSmooth3d(l),col='red') # second line not so good rgl.linestrips(l2) rgl.linestrips(LineSmooth3d(l2),col='red') -- Gregory Jefferis, PhD and: Research Fellow Department of Zoology St John's College University of Cambridge Cambridge Downing Street CB2 1TP Cambridge, CB2 3EJ United Kingdom Lab Tel: +44 (0)1223 336683 Office: +44 (0)1223 339899 Lab Fax: +44 (0)1223 336676 [EMAIL PROTECTED] http://www.zoo.cam.ac.uk/zoostaff/jefferis.html http://www.neuroscience.cam.ac.uk/directory/profile.php?gsxej2 http://flybrain.stanford.edu ______________________________________________ R-help@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.