Thank you guys! The solution turned out to be very simple, but I couldn't find it anywhere (not even in the help of the function curve()). I think there's not much difference in both methods, but with curve you can easily adjust the amount of a values with 'n = ...' option, to make a smooth line.
2012/7/5 David Winsemius <dwinsem...@comcast.net> > > On Jul 5, 2012, at 8:34 AM, Boudewijn Verkooijen wrote: > > Dear all, >> >> I'm using the curve() function to plot discharge Q against water depth a. >> However, I would like to have a graph of water depth a plotted against >> discharge Q. How can this be done? >> Minimal working example: >> S0 = 0.004 >> n = 0.04 >> tanalpha = 1.4/1.5 >> par(mar = c(5,5,1,1)) # b, l, t, r >> curve((sqrt(S0)/n)*(0.035+(0.**7+(x-0.1)/tanalpha)*(x-0.1))*(** >> (0.035+(0.7+(x-0.1)/tanalpha)***(x-0.1))/(2*sqrt((0.7/2)^2+0.** >> 1^2)+2*sqrt((x-0.1)^2+((x-0.1)**/tanalpha)^2)))^(2/3),0.1,1.**55, >> lwd = 3, col = "royalblue4", ann = F, axes = T) >> title(xlab = parse(text='a~bgroup("[", m, "]")')) >> title(ylab = parse(text='Q~bgroup("[", m^3/s, "]")')) >> box() >> I tried to find the inverse function, but that doesn't seem to exist. >> > > R does not perform computer algebra. If you wanted a numerical approach, > you can construct a close fit to that function with approxfun() and then > reverse the x and y roles to create an inverse. Actually, since curve > returns a list with x and y components you could also do this: > > xycurv <- curve((sqrt(S0)/n)*(0.035+(0.**7+(x-0.1)/tanalpha)*(x-0.1))*(** > (0.035+(0.7+(x-0.1)/tanalpha)***(x-0.1))/(2*sqrt((0.7/2)^2+0.** > 1^2)+2*sqrt((x-0.1)^2+((x-0.1)**/tanalpha)^2)))^(2/3),0.1,1.**55, > > + lwd = 3, col = "royalblue4", ann = F, axes = T) > > plot(xycurv$y, xycurv$x) > > > -- > > David Winsemius, MD > West Hartford, CT > > [[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.