Sorry, I thought it might be an issue with the mac build itself, since it seemed unlikely that the contour function would be misbehaving in the general sense. I thought it might be a bug, but it turns out it was in my definitions.
________________________ Thomas Veltman Kanan Lab Department of Chemistry Stanford University [email protected] On Oct 24, 2012, at 9:32 PM, David Winsemius <[email protected]> wrote: > > On Oct 24, 2012, at 7:42 PM, Thomas Veltman wrote: > >> Hey gang! >> >> This is my first post to the list, but I will try to be as precise as >> possible. I have googled around and can't find an easy explanation for why >> this is happening, so I figured I had better get some help from the experts, >> so thanks in advance! My code is supplied below. I am running R 2.15.1 on >> Mountain Lion, 64-bit. OSX is 10.8.2 >> >> I want to plot iso-efficiency lines for a hypothetical device. I have a >> fully-parameterized expression, and have checked its sanity by hand, and it >> appears to operate as it ought to. However, when I use the contour() >> function, the contour lines it produces don't lie in the correct place. I >> generally believe their shape, but they appear to be translated by some >> amount. I know that the analytical expression produces a given value, but >> when I look for that point on the plot, the iso-efficiency line doesn't cut >> through the point. This is illustrated in the following code by the blue >> circle. That point should fall on the red line, but clearly it does not. >> Nevertheless, the governing equation (as defined in the R code) produces the >> correct result (if you check the array "Electrolyzer", the numbers match >> what you would get from simply applying the appropriate values to the >> expression, so it isn't a problem in the iterative population of the array). >> I tried varying the me! sh ! >> size (i.e. the number of points in the vectors etaELEC and FE), but of >> course this didn't have any effect besides smoothing the curves out a bit >> more. I also thought that it might be a problem with the png output, but I >> tried generating the figure in the quartz window, and the error persists. I >> also tried closing R, not saving the workspace, reopening, making a >> completely new working directory, and then re-entering the functions. In >> all cases, the plot still ends up funky. >> >> Is there something fundamental that I am missing about the contour plot >> function? > > It seems unlikely that the contour functions is performing improperly. > >> str(Electrolyzer) > num [1:96, 1:96] 0.0035 0.0042 0.00489 0.00559 0.00629 ... > > My wild guess (in the absence of any specifics about why you thought this was > the wrong answer) is that this is due to the fact that matrix indices in R at > 1-based, not 0-based as in other languages common among electrical engineers. > > And why is this being posted to the Mac-SIG group, anyway? I see no > Mac-specific content. > >> Also, for those playing along at home, the code includes an "easy" way to >> add subscripts after special characters in a plot title (which is typically >> a useful feature). Relevant code is pasted below: >> >> >> Ecap <- function(etaELEC, FE, etaFC, etaRP, ENH3, etaCOMP, etaST) { >> (etaELEC)/((1+ ((1-FE)/(FE*1.43) )*(1-etaST* etaELEC+ >> ((1.2*1.43*etaELEC)/(etaRP*ENH3))) + ((7.3*etaELEC)/(2*etaCOMP*ENH3)) + >> ((25*etaELEC)/(etaRP*ENH3))))} >> >> >> etaELEC <- seq(from=0.05,to=1, by=0.01) >> FE <- seq(from=0.05,to=1, by=0.01) >> >> >> Electrolyzer <- array(0, dim=c(length(etaELEC), length(FE))) >> for (i in 1:length(etaELEC)){ >> for (j in 1:length(FE)){ >> Electrolyzer[i,j] <- Ecap(FE=FE[j], etaST=0, etaFC=0, >> etaELEC=etaELEC[i], etaRP=0.6, etaCOMP=0.95 ,ENH3=340)}} > >> png(file="Standalone.png",bg="transparent",height=5400,width=5400,res=864) >> par(family="serif",tck=0.01) >> plot(0, type="n", xlim=c(0,1), ylim=c(0,1), cex.lab=1.2, >> main="Energy Capture Coefficient for Standalone Device", >> xlab="Electrolyzer Voltage Efficiency", ylab="Faradaic Efficiency", >> cex.sub=0.75, >> sub=expression(paste(eta,""[FC],"=0, ",eta,""[Comp],"=0.95, >> ",eta,""[Sterling],"=0, ",eta,""[RP],"=0.60, "))) >> #make blank plot box with correct axes, etc... >> contour(x=seq(0, 1, length.out=(nrow(Electrolyzer))), >> y=seq(0, 1, length.out=(ncol(Electrolyzer))), >> Electrolyzer, axes=FALSE, >> levels=c(-0.1, 0, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1)) >> contour(x=seq(0,1, length.out=(nrow(Electrolyzer))), >> y=seq(0,1,length.out=(ncol(Electrolyzer))), >> Electrolyzer,axes=FALSE,levels=c(0.102),col="red") >> points(0.5,0.1547,col="blue") >> dev.off() > > -- > David Winsemius, MD > Alameda, CA, USA > [[alternative HTML version deleted]] _______________________________________________ R-SIG-Mac mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-sig-mac
