[R] plotting arrows with different colors and varying head size

Greg Snow Greg.Snow at imail.org
Mon Jan 19 22:45:43 CET 2009


Look at the my.symbols function in the TeachingDemos package (along with the ms.arrows function in the same package), that may do what you want.

Hope this helps,

-- 
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at imail.org
801.408.8111


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Héctor Villalobos
> Sent: Monday, January 19, 2009 12:51 PM
> To: r-help at r-project.org
> Subject: [R] plotting arrows with different colors and varying head
> size
> 
> Dear list,
> 
> I would like to plot arrows with different colors according to arrow
> length, and also (if
> possible) with head size proportional to arrow length. The idea is to
> make a quiver-like plot of
> matlab with wind speed data.
> 
> So far, I´ve been able to use different colors, but I need to find a
> more efficient way to recode
> arrow length intervals into colors. On the contrary, I can't define
> different head sizes, because
> the "length" argument in the "arrows()" function seems to control the
> head size of all the
> arrows at once.
> 
> Any help will be greatly appreciated.
> 
> 
> 
> ## Generate random data
>      set.seed(1)
>      xcoor <- matrix(runif(20), ncol=5)
>      ycoor <- matrix(runif(20), ncol=5)
>        u <- matrix(rnorm(20)/10, ncol=5)
>        v <- matrix(rnorm(20)/10, ncol=5)
> 
> ## calculate arrows length and look histogram
>      arrowlen <- sqrt(u^2 + v^2)
>      hist(arrowlen)
> 
> ## recode arrow lengths (by interval) into colors
> ## sorry, I don't know how to do it without the car  package
>      library(car)
>      arrowL <- recode(as.vector(arrowlen),
>                                          "0='grey90';
>                                      0:0.05='grey50';
>                                    0.05:0.1='grey';
>                                    0.1:0.15='cyan';
>                                    0.15:0.2='blue';
>                                    0.2:0.25='red'")
> 
>     length=0.1
> 
> par.uin <- function()
>   # determine scale of inches/userunits in x and y
>   # from http://tolstoy.newcastle.edu.au/R/help/01c/2714.html
>   # Brian Ripley Tue 20 Nov 2001 - 20:13:52 EST
>  {
>     u <- par("usr")
>     p <- par("pin")
>     c(p[1]/(u[2] - u[1]), p[2]/(u[4] - u[3]))
>   }
> 
> 
> ## plot arrows
>  plot(as.vector(xcoor), as.vector(ycoor), type="p", pch=".", xlim=c(-
> 0.2, 1.3),
>       ylim=c(-0.2, 1.3))
>    arrows( xcoor, ycoor, xcoor + u, ycoor + v,
>           length = length*as.vector(arrowlen)*min(par.uin()),
> col=arrowL)
> 
> 
> 
>  > sessionInfo()
> R version 2.8.1 (2008-12-22)
> i386-pc-mingw32
> 
> locale:
> LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
> States.1252;LC_MONETARY=English_United
> States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
> 
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods
> [7] base
> 
> other attached packages:
> [1] car_1.2-9  hdf5_1.6.7
> 
> 
> 
> --
> Héctor Villalobos <hvillalo at ipn.mx>
>  CICIMAR - IPN
>   La Paz, Baja California Sur, MÉXICO
> 
> 
> 	[[alternative HTML version deleted]]




More information about the R-help mailing list