[R-sig-Geo] Creating a median curve among multiple curvesin ggplot

Bede-Fazekas Ákos b|@|ev||@t @end|ng |rom gm@||@com
Sat Jun 1 22:04:16 CEST 2019


Hi,
median() automatically sorts the data, so the order of the rasters is 
not important, I think.
Have a nice weekend,
Ákos

2019.06.01. 19:23 keltezéssel, rain1290 using aim.com írta:
> Hi Akos,
>
> Actually, I believe both of these worked just fine after testing them 
> and returned the 140 values in each case! For the second variable, I 
> first received an error after running it, but this was because the 
> number of years/layers differed slightly for one of the objects 
> (Model42), being 138 years/layers. So, I just modified the code to 
> account for this (i.e. 1:138), and it worked fine. :)
>
> Also, I need not arrange the raster objects in ascending order, 
> correct? My sense is that it automatically sorts the values for each 
> object from lowest to highest for each year for each grid cell. At 
> least that is what it did for the 1-dimensional objects for the first 
> variable, as the median values shown there are correctly ascending (as 
> they should be with each year).
>
> Many, many thanks, once again!
>
> -----Original Message-----
> From: Bede-Fazekas Ákos <bfalevlist using gmail.com>
> To: rain1290 <rain1290 using aim.com>; r-sig-geo <r-sig-geo using r-project.org>
> Sent: Sat, Jun 1, 2019 12:47 pm
> Subject: Re: [R-sig-Geo] Creating a median curve among multiple 
> curvesin ggplot
>
> Hello,
> Sorry for this, it was wrong. This might work:
> RCP1pctCO2Median <- apply(X = cbind(get, IPSL, IPSLMR, IPSL5, MIROC, 
> HadGEM, MPI, MPI5, GFDL, GFDL5), MARGIN = 1, FUN = median)
>
> OK, I understand now the structure of your rasters.
> Something like this may do the task:
> stack(lapply(X = 1:140, FUN = function(year) {calc(x = stack(lapply(X 
> = list(Model2, Model10, Model18, Model26, subset14, Model42, subset20, 
> subset24, Model60, Model68), FUN = "[[", i = year)), fun = median)}))
> (Again, this is not tested. If you send us reproducible examples then 
> we can try the code what we suggest you.)
> HTH,
> Ákos
>
> 2019.06.01. 18:06 keltezéssel, rain1290 using aim.com 
> <mailto:rain1290 using aim.com> írta:
> Hi Akos (and everyone),
>
> Thank you kindly for this response!
>
> I tried your suggestions, but for the first variable:
>
> RCP1pctCO2Median <- median(apply(X = cbind(get, IPSL, IPSLMR, IPSL5,
> MIROC, HadGEM, MPI, MPI5, GFDL, GFDL5)), MARGIN = 1, FUN = median)
>
> I receive this error:
>
> Error in match.fun(FUN) : argument "FUN" is missing, with no default
>
> Why would that appear?
>
> Also, for the raster objects for the second variable, yes, what you 
> suggested worked, but this returns only the single median value per 
> grid cell for the 140 years, as opposed to 140 medians (i.e. a median 
> for each year/each layer) for each grid cell. Ideally, I would like to 
> derive 140 medians corresponding to each of the 140 years/layers for 
> each grid cell. Is there a way to do this?
>
> Here is what some of the values/structure look like for the object Model2:
>
> > head(Model2) X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 [1,] 7.395703 6.493830 
> 7.432156 6.767403 11.66004 7.158040 13.968703 8.139962 7.927880 
> 10.367045 8.560315 [2,] 7.277671 6.318810 8.406366 5.974478 12.51484 
> 7.405914 15.350679 7.977879 8.039850 9.696597 9.374163 [3,] 6.919258 
> 6.119063 9.485675 6.256432 13.44547 7.542754 10.846225 8.441847 
> 8.155234 10.129576 10.074353 [4,] 6.633444 6.300559 10.349174 6.733875 
> 14.35567 7.589797 12.452223 8.384633 8.697707 10.025741 10.589373 [5,] 
> 6.986749 7.057785 11.202586 8.037964 15.08123 7.668468 11.838186 
> 8.506311 8.978721 9.699996 10.256382 [6,] 7.287383 7.561100 12.091483 
> 8.384658 15.56648 7.662876 8.925544 9.431210 8.979276 10.047477 
> 10.898319 [7,] 7.957773 7.732338 13.998432 8.982379 15.50928 7.599275 
> 8.548879 8.287948 8.745722 9.496011 10.861937 X12 X13 X14 X15 X16 X17 
> X18 X19 X20 X21 X22 [1,] 5.533977 10.534669 12.136978 8.897428 
> 10.07571 8.485538 7.731084 10.557160 15.36603 12.320665 11.274374 [2,] 
> 6.010256 10.299062 12.703854 9.522287 11.08078 8.996936 6.919732 
> 10.900610 14.44405 11.949420 11.202058 [3,] 6.590125 9.553597 
> 12.781633 9.015289 11.35786 9.215069 6.888467 9.571572 13.47964 
> 10.308230 9.772387 [4,] 7.042177 8.800974 12.292124 11.457335 11.96268 
> 9.329095 7.078347 9.072567 13.90133 9.780438 9.901325 [5,] 7.613796 
> 9.617242 11.511468 11.527631 12.94864 9.510409 7.504535 8.380163 
> 14.01753 9.804405 10.389509 [6,] 8.146129 9.211740 11.250921 11.483143 
> 13.93948 8.881543 7.888670 8.917588 13.32526 8.609215 9.584101 [7,] 
> 8.551682 8.858268 10.417808 11.292067 15.19191 9.224810 8.231571 
> 7.949825 12.58279 8.042569 9.816563
>
> Thanks, once again, and I look forward to your response!
>
> -----Original Message-----
> From: Bede-Fazekas Ákos <bfalevlist using gmail.com> 
> <mailto:bfalevlist using gmail.com>
> To: r-sig-geo <r-sig-geo using r-project.org> <mailto:r-sig-geo using r-project.org>
> Sent: Sat, Jun 1, 2019 11:47 am
> Subject: Re: [R-sig-Geo] Creating a median curve among multiple 
> curvesin ggplot
>
> Hello,
> in case of the vectors, you can get the median of the different models
> for each of the years using apply() function:
> RCP1pctCO2Median <- median(apply(X = cbind(get, IPSL, IPSLMR, IPSL5,
> MIROC, HadGEM, MPI, MPI5, GFDL, GFDL5)), MARGIN = 1, FUN = median)
> It calculates the median of each of the rows (= years) of the matrix.
>
> In case of rasters, use raster::calc(), if all the rasters are
> single-layer RasterLayer objects:
> RCP1pctCO2ModelMedian <- calc(x = stack(Model2, Model10, Model18,
> Model26, subset14, Model42, subset20, subset24, Model60, Model68), fun =
> median)
> Since your rasters are multi-layer RasterBrick, you should give more
> details of their stucture/content to let us answer your question.
>
> HTH,
> Ákos Bede-Fazekas
> Hungarian Academy of Sciences
>
> 2019.06.01. 17:24 keltezéssel, rain1290--- via R-sig-Geo írta:
> > Hi there,
> > Using ggplot, I have successfully created a plot that contains 37 
> separate line plots that each represent a trend in precipitation over 
> 140 years. However, what I would like to do is show the curve that is 
> the "median" of these lines. Is this possible to do?
> > Here is what I have so far in an attempt to do this, but I am not 
> certain if it is the correct approach to create the desired median 
> line - the first variable shows x-variable objects (each 
> 1-dimensional) and the second variable shows the y-variable objects 
> (3-dimensional):
> > RCP1pctCO2Median <- median(cbind(get, IPSL, IPSLMR, IPSL5, MIROC, 
> HadGEM, MPI, MPI5, GFDL, GFDL5))
> > RCP1pctCO2ModelMedian <- median(cbind(Model2, Model10, Model18, 
> Model26, subset14, Model42, subset20, subset24, Model60, Model68))
> >
> > The first variable appears to work, but it only returns one value, 
> and I want all of the 140 values corresponding to whichever curve was 
> returned. Why is it that only one value returns? Here is what the 
> variable contains:
> >> RCP1pctCO2Median[1] 1.189044
> > When I run the second variable the same way, I receive the following 
> error:
> > Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) :
> >    'x' must be atomic
> > Why does this appear?  I tried "unlist" and "as.vector", but the 
> same error appears.
> > If it helps, to show what the 1-dimensional objects of the first 
> variable look like, here is an example of one (the object "get"):
> >> get
> >    [1] 0.00000000 0.00644777 0.01250601 0.01746194 0.02656210 
> 0.03360072 0.04399755 0.05404601 0.06154399 0.07105423
> >  [11] 0.08315538 0.08925389 0.10060635 0.10833009 0.12196157 
> 0.13730928 0.14890850 0.16087072 0.17361501 0.18310140
> >  [21] 0.19810085 0.21316248 0.22423607 0.23529990 0.24695577 
> 0.26119599 0.27643532 0.28517213 0.29978970 0.31870887
> >  [31] 0.33418021 0.34585044 0.36071229 0.37379062 0.39324498 
> 0.41099992 0.42437476 0.43643925 0.44687960 0.45864752
> >  [41] 0.48055932 0.49634662 0.50779009 0.52861303 0.54971600 
> 0.56138206 0.57472491 0.59202033 0.60975420 0.63057494
> >  [51] 0.64653736 0.66088217 0.68168259 0.69649595 0.71363837 
> 0.72988760 0.75010443 0.76776582 0.78613955 0.81099886
> >  [61] 0.82979667 0.84431553 0.86824787 0.88447672 0.89909577 
> 0.92162514 0.94854647 0.96631038 0.98120815 1.00357985
> >  [71] 1.02769291 1.04733002 1.06585240 1.09083056 1.11592567 
> 1.13627303 1.15866983 1.17941856 1.19748724 1.22012913
> >  [81] 1.24142718 1.26937973 1.29283488 1.31011736 1.33134723 
> 1.36014366 1.38395822 1.40615380 1.42895305 1.45046842
> >  [91] 1.47504234 1.49920797 1.52142668 1.54559219 1.57354927 
> 1.60000896 1.62449229 1.64506662 1.67100036 1.70185161
> > [101] 1.72964287 1.75235510 1.77455521 1.80183053 1.83121216 
> 1.85619974 1.88188243 1.91002214 1.93333006 1.96133912
> > [111] 1.98944890 2.01225924 2.03804183 2.06614304 2.09558916 
> 2.12400699 2.14846969 2.18011498 2.20532560 2.23031592
> > [121] 2.26106715 2.28796983 2.31954741 2.35274339 2.37794161 
> 2.40643740 2.43963051 2.46948838 2.49733877 2.53035021
> > [131] 2.56229091 2.59265327 2.61934137 2.64592481 2.67754769 
> 2.70779777 2.73824191 2.76880598 2.80077982 2.83057237
> >
> > For the 3-D objects within the second variable, here is what is 
> contained in the object "Model2", for example:
> >> Model2 <- brick("MaxPrecCCCMACanESM21pctCO2.nc", var = "onedaymax")
> >> Model2class      : RasterBrick
> > dimensions  : 64, 128, 8192, 140  (nrow, ncol, ncell, nlayers)
> > resolution  : 2.8125, 2.789327  (x, y)
> > extent      : -181.4062, 178.5938, -89.25846, 89.25846  (xmin, xmax, 
> ymin, ymax)
> > coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
> > data source : C:/Users/Travis/Documents/Other documents/All netCDF 
> files/netcdffiles/MaxPrecCCCMACanESM21pctCO2.nc
> > names      : X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, 
> X14, X15, ...
> > z-value    : 1, 140 (min, max)
> > varname    : onedaymax
> >
> >
> > In any case, I am not even certain if what I have done above is the 
> correct approach altogether to create a median line, but I would 
> greatly appreciate any assistance! Your feedback would be extremely 
> valuable to me!
> > Thank you, and I very much look forward to hearing from you!
>
> >     [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > R-sig-Geo mailing list
> > R-sig-Geo using r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> >
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>


	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list