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.s...@imail.org 801.408.8111 > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r- > project.org] On Behalf Of Héctor Villalobos > Sent: Monday, January 19, 2009 12:51 PM > To: r-help@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 <hvill...@ipn.mx> > CICIMAR - IPN > La Paz, Baja California Sur, MÉXICO > > > [[alternative HTML version deleted]] ______________________________________________ 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.