""" quiver-test.py """ def quiverfunc(fxy, x0, x1, xby, y0, y1, yby, pallette="terrain.colors", contourcolor="gray"): S = """ 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])) } quiver2 <- function(expr, x, y, nlevels=20, length=0.05, ...){ z <- expand.grid(x,y) xx <- x x <- z[,1] yy <- y y <- z[,2] fxy <- eval(expr) grad_x <- eval(D(expr, "x")) grad_y <- eval(D(expr, "y")) dim(fxy) <- c(length(xx), length(yy)) dim(grad_x) <- dim(fxy) dim(grad_y) <- dim(fxy) maxlen <- min(diff(xx), diff(yy)) * .9 grad_x <- grad_x / max(grad_x) * maxlen grad_y <- grad_y / max(grad_y) * maxlen filled.contour(xx, yy, fxy, nlevels=nlevels, plot.axes = { contour(xx, yy, fxy, add=T, col="gray", nlevels=nlevels, drawlabels=FALSE) arrows(x0 = x, x1 = x + grad_x, y0 = y, y1 = y + grad_y, length = length*min(par.uin())) axis(1) axis(2) }, ...) } f <- expression( #expr) x <- seq(#x0, #x1,by= #xby) y <- seq(#y0, #y1,by= #yby) par(mar=c(3,3,3,3)) quiver2(f,x,y, color.palette=#pallette) graphics.off() """ S = S.replace("#expr", fxy) S = S.replace("#x0", x0) S = S.replace("#x1", x1) S = S.replace("#xby",xby) S = S.replace("#y0", y0) S = S.replace("#y1", y1) S = S.replace("#yby",yby) S = S.replace("#pallette",pallette) S = S.replace("#contourcol", contourcolor) return S Rcode = 'png("temp.png", 6 *72, 6 *72)' Rcode += quiverfunc("(3*x^2 + y) * exp(-x^2-y^2)", "-2", "2", "0.2", "-2", "2", "0.2", pallette="terrain.colors", contourcolor="gray") print RcodeSave the file to "test-quiver2.py". Then to run it, type python quiver2.py > out.R. Then issue R < out.R --no-save. The generated image is in temp.png. Finally, display it using the imagemagick tool: display temp.png.
Monday, August 23, 2010
Generating quiver plots using R under Python
Here is Python code to generate an R script which in turn does the actual image generation.
Labels:
quiver or arrows plot,
R Plots
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment