Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

The Atmospheric Science Data Center (ASDC) at NASA Langley Research Center offers several data sources. For example, it is possible to download a text file with the 22-year (July 1983 – June 2005) monthly and annual average of global horizontal irradiation.

```nasafile <- 'http://eosweb.larc.nasa.gov/sse/global/text/global_radiation'
```

With this data, R and the solaR package we can calculate (for example) the global effective irradiation incident on several surfaces: a fixed PV generator, a two-axis tracker and a N-S horizontal tracker. First, let’s plot the original data using some spatial packages:

```library(lattice)
library(latticeExtra)
library(solaR)
library(sp)
library(maps)
library(mapdata)
library(maptools)
library(gstat)
library(hexbin)

proj <- CRS('+proj=latlon +ellps=WGS84')
coords=nasa[,2:1]
datos=nasa[,3:15]
nasaSP <- SpatialPixelsDataFrame(points=coords, data=datos, proj4string=proj)

world <- map("world", plot=FALSE)

llCRS <- CRS("+proj=latlong +ellps=WGS84")
world_sp <- map2SpatialLines(world, proj4string=llCRS)

paleta=colorRampPalette(rev(brewer.pal('YlOrRd', n=9)))
paleta2=colorRampPalette((brewer.pal('RdBu', n=11)))
paleta3=heat.ob ##From hexbin

mapa <- list('sp.lines', world_sp)
spplot(nasaSP["Ann"], col.regions=paleta3, sp.layout=mapa)
```

Now we can calculate the global effective irradiation with solaR (NOTE: this loop spends some time to finish. The results are available here.)

```N=nrow(nasa)
gefNasa <- matrix(nrow=N, ncol=3)

for (i in 1:N){
prom=list(G0dm=as.numeric(nasa[i,3:14]*1000))
lat=nasa[i,1]
gefFixed <- calcGef(lat=lat, prom=prom)
gef2x <- calcGef(lat=lat, modeRad='prev', prev=gefFixed, modeTrk='two')
gefHoriz <- calcGef(lat=lat, modeRad='prev', prev=gefFixed, modeTrk='horiz')
gefNasa[i, ] <- sapply(list(gefFixed, gef2x, gefHoriz), function(x)as.data.frameY(x)\$Gefd)
print(i)
}

```

Ok, we got it. Let’s build an Spatial object with it:

```gefNasaSP <- SpatialPixelsDataFrame(points=coords, data=gefNasaDF, proj4string=proj)
```

And now we can plot the results. First, the two-axis tracker:

```ncuts <- 7
colContour <- paleta3(ncuts)[2]

spplot(gefNasaSP['Two'], sp.layout=mapa,
col.regions=paleta3, colorkey=list(space='bottom'),
contour=TRUE, cuts=ncuts, col=colContour, lwd=0.5,
scales=list(draw=TRUE)
)
```

then, the N-S horizontal tracker:

```spplot(gefNasaSP['Horiz'], sp.layout=mapa,
col.regions=paleta3, colorkey=list(space='bottom'),
contour=TRUE, cuts=ncuts, col=colContour, lwd=0.5,
scales=list(draw=TRUE)
)
```

and now the fixed generator:

```spplot(gefNasaSP['Fixed'], sp.layout=mapa,
col.regions=paleta3, colorkey=list(space='bottom'),
contour=TRUE, cuts=ncuts, col=colContour, lwd=0.5,
scales=list(draw=TRUE)
)
```

Finally, let’s plot the irradiation incident on a NS horizontal tracker versus the irradiation incident on a fixed surface for the latitudes between -60º and 60º. I use the violin and box plots as described here.

```gefNasaSP\$HorizFixed <- gefNasaSP\$Horiz/gefNasaSP\$Fixed

bwplot(HorizFixed~cut(Lat, pretty(Lat, 40)),
xlab='Latitude', ylab=expression(G[ef]^{horiz}/G[ef]^{fixed}),
data=as.data.frame(gefNasaSP),
horizontal=FALSE,
panel = function(..., box.ratio) {
panel.violin(..., col = "lightblue",
varwidth = FALSE, box.ratio = box.ratio)
panel.bwplot(..., col='black',
cex=0.8, pch='|', fill='gray', box.ratio = .1)
},
par.settings = list(box.rectangle=list(col='black'),
plot.symbol = list(pch='.', cex = 0.1)),
scales=list(x=list(rot=45, cex=0.6)),
subset=(abs(Lat)<60))
```

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.