[R] Fit a smooth closed shape through 4 points

Alexander Shenkin ashenkin at ufl.edu
Mon Mar 21 15:04:15 CET 2016


Thanks for your reply, Charles.  spline() doesn't seem to fit a closed 
shape; rather, it's producing a parabola.  Perhaps I'm missing an 
argument I should include?

grid.xspline() seems to get close to what I need, but it returns a grob 
object - not sure how to work with those as shapes per se.

My goal is to produce a 2D shape from which I can calculate area, 
average widths, and other such things.  The context is that we have 
measured tree crowns in a manner that has produced 4 points such as 
these from two offset axes.  We want to use the resulting shapes for our 
calculations.

(incidentally, my original points were off - here are the correct ones)

shapepoints = structure(list(x = c(8.9, 0, -7.7, 0, 8.9), y = c(0, 2, 0, 
-3.8,
0)), .Names = c("x", "y"), row.names = c(NA, -5L), class = "data.frame")

plot(spline(shapepoints))

Thanks,
Allie

On 3/21/2016 1:10 PM, Charles Determan wrote:
> Hi Allie,
>
> What is you goal here?  Do you just want to plot a curve to the data?
> Do you want a function to approximate the data?
>
> You may find the functions spline() and splinefun() useful.
>
> Quick point though, with so few points you are only going to get a very
> rough approximation no matter the method used.
>
> Regards,
> Charles
>
>
> On Mon, Mar 21, 2016 at 7:59 AM, Alexander Shenkin <ashenkin at ufl.edu
> <mailto:ashenkin at ufl.edu>> wrote:
>
>     Hello all,
>
>     I have sets of 4 x/y points through which I would like to fit
>     closed, smoothed shapes that go through those 4 points exactly.
>     smooth.spline doesn't like my data, since there are only 3 unique x
>     points, and even then, i'm not sure smooth.spline likes making
>     closed shapes.
>
>     Might anyone else have suggestions for fitting algorithms I could
>     employ?
>
>     Thanks,
>     Allie
>
>
>     shapepoints = structure(c(8.9, 0, -7.7, 0, 0, 2, 0, 3.8), .Dim = c(4L,
>     2L), .Dimnames = list(NULL, c("x", "y")))
>
>     smooth.spline(shapepoints)
>
>     # repeat the first point to close the shape
>     shapepoints = rbind(shapepoints, shapepoints[1,])
>
>     smooth.spline(shapepoints)
>
>     ______________________________________________
>     R-help at r-project.org <mailto:R-help at r-project.org> mailing list --
>     To UNSUBSCRIBE and more, see
>     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.
>
>



More information about the R-help mailing list