[R-sig-Geo] How to plot multiple semi-variogram from a single dataset efficiently in R?
Tim Appelhans
tim.appelhans at gmail.com
Wed Aug 26 10:22:39 CEST 2015
Uzzal,
first of all, please always reply to the list as well. As I said, other
people might have similar problems and will thus be able to find a
soultion in the mail archives.
If you run the code I gave you, you will see that it works.
The relevant bit is
layer(panel.text(x = 1000, y = 900, adj = c(0, 1),
labels = dates[panel.number()]))
where the text gets plotted at x = 1000 and y = 900. In your case, y =
900 is beyond the limits of the y-scale.
Replacing the above with this should fix it:
layer(grid.text(x = unit(0.1, "npc"),
y = unit(0.9, "npc"),
just = c("left", "top"),
label = dates[panel.number()]))
This will use normalised x and y scales ranging from 0 to 1 no matter
what the absolute units are.
HTH
Tim
On 26.08.2015 10:12, Uzzal wrote:
>
> Oh really! But I got plot like this(Attached)!
>
> Uzzal
>
> --- Original Message ---
> *From : * "Tim Appelhans"<tim.appelhans at gmail.com>
> *To : * "Uzzal"<uzzal at gist.ac.kr>,
> "r-sig-geo"<r-sig-geo at r-project.org>
> *Date : * 2015/08/26 Wednesday PM 4:41:28
> *Subject : * Re: [R-sig-Geo] How to plot multiple semi-variogram
> from a single dataset efficiently in R?
>
> Uzzal,
> it should show exactly that in the top left corner of each
> variogram. It does on my computer.
>
> Also, I include R-si-geo again as other people might have similar
> problems.
>
> Cheers
> Tim
>
> On 26.08.2015 08:06, Uzzal wrote:
>> I am extreamly sorry for my previous mail. Now its working.I
>> forgot to loaded "latticeExtra" package.
>>
>> The plots I got ,it all have individual names . But every plot
>> has 7 variogram.is it possible to naming each variogram in each
>> plot also like "20120301","20120302",..........."201203007"?
>>
>> Uzzal
>>
>> --- Original Message ---
>> *From : * "Tim Appelhans"<tim.appelhans at gmail.com>
>> *To : * "Uzzal"<uzzal at gist.ac.kr>
>> *Date : * 2015/08/26 Wednesday AM 1:14:25
>> *Subject : * Re: [R-sig-Geo] How to plot multiple
>> semi-variogram from a single dataset efficiently in R?
>>
>> How's this:
>>
>> ### in order to use latticeCombineGrid() you need to use
>> ##################
>> ### library(devtools) to install library(Rsenal)
>> ##########################
>> # install.packages(devtools)
>> # library(devtools)
>> # install_github("environmentalinformatics-marburg/Rsenal")
>> ###########################################################################
>>
>> library(sp)
>> library(gstat)
>> library(rgdal)
>> library(automap)
>> library(Rsenal)
>> library(latticeExtra)
>>
>> seoul311 <- read.csv("Downloads/seoul1to7.csv")
>> seoul311 <- na.omit(seoul311)
>>
>> ### first we split seoul311 by time into a list rather than
>> subsetting manually
>> seoul311_splt <- split(seoul311, seoul311$time)
>>
>> ### now we loop (using lapply()) over each seoul311_splt
>> entry and calculate
>> ### variogram using autofitVariogram and return the variogram
>> plot
>> vars <- lapply(seq(seoul311_splt), function(i) {
>>
>> dat <- seoul311_splt[[i]]
>> coordinates(dat) <- ~LON+LAT
>> proj4string(dat) <- "+proj=longlat +datum=WGS84"
>> dat <- spTransform(dat, CRS("+proj=utm +north +zone=52
>> +datum=WGS84"))
>>
>> variogram <- autofitVariogram(PM10 ~ 1, dat)
>>
>> plt <- plot(variogram, plotit = FALSE, asp = 1)
>>
>> ### in case you do not want to fix xlim and ylim to be
>> identical
>> ### for each plot just comment out the following line or change
>> ### values as you see fit
>> plt <- update(plt, xlim = c(-1000, 45000), ylim = c(0, 1000))
>>
>> return(plt)
>> })
>>
>> ### now we actually have 23 * 7 variogram plots which we will
>> combine
>> ### into 23 hourly plots using latticeCombineGrid()
>> hrs <- substr(names(seoul311_splt), 9, 10)
>> dates <- unique(substr(names(seoul311_splt), 1, 8))
>> hrs_unique <- unique(substr(names(seoul311_splt), 9, 10))
>>
>> plts_hrs <- lapply(seq(unique(hrs)), function(j) {
>>
>> indx <- hrs %in% unique(hrs)[j]
>> hr_plt <- vars[indx]
>>
>> fin_plt <- latticeCombineGrid(hr_plt, layout = c(3, 3)) +
>> layer(panel.text(x = 1000, y = 900, adj = c(0, 1),
>> labels = dates[panel.number()]))
>>
>> fin_plt <- update(fin_plt, main = paste("Variogram for
>> hour", hrs_unique[j]))
>>
>> return(fin_plt)
>>
>> })
>>
>> ### save each plot as .png
>> ### NOTE: latttice plots need to be print()ed!!!
>> for (i in seq(hrs_unique)) {
>> png(paste0("plot_hr_", hrs_unique[i], ".png"),
>> width = 25, height = 25, units = "cm", res = 300)
>> print(plts_hrs[[i]])
>> dev.off()
>> }
>>
>>
>> Is this what you need?
>>
>> Best
>> Tim
>>
>> On 25.08.2015 06:19, Uzzal wrote:
>>>
>>> Hello Tim, How about your last weekend? By the way, you told
>>> me to make you remember about my last problem. Good day.
>>>
>>> Uzzal
>>>
>>> --- Original Message ---
>>> *From : * "Tim Appelhans"<tim.appelhans at gmail.com>
>>> *To : * "Uzzal"<uzzal at gist.ac.kr>
>>> *Date : * 2015/08/19 Wednesday PM 7:21:54
>>> *Subject : * Re: [R-sig-Geo] How to plot multiple
>>> semi-variogram from a single dataset efficiently in R?
>>>
>>> Uzzal,
>>> this is surely possible. I will be on holidays until
>>> next week so will not get back to you before then.
>>> If you haven't heard from me by the end of next week,
>>> please send me a reminder email as I will most likely
>>> have gotten crried away with other things.
>>>
>>> Cheers
>>> Tim
>>>
>>> On 18.08.2015 19:03, Uzzal wrote:
>>>>
>>>> Dear Tim, Thank you so much for your quick response. It
>>>> helped me a lot. I can't resist myself to ask you my
>>>> another query related to this. I don't know, If you
>>>> mind then please tell me, I will ask in another email:
>>>>
>>>> My another query:
>>>> According to your coad,
>>>>
>>>>
>>>> plts_hrs[[1]]
>>>> .
>>>> .
>>>> plts_hrs[[23]] give me the 23 plots individually
>>>> with same title. If I want those 23 plots _with
>>>> different title(also individual name of variogram in a
>>>> plot)_
>>>>
>>>> by a single loop and those plots will be automatically
>>>> saved in a folder, Is it possible in R?
>>>>
>>>> For example, First plot title would be "Variogram for
>>>> 1.00 a.m
>>>>
>>>> And the 7 variograms title in the first plot would be
>>>> like 1 march , 2.00 march....7 march.
>>>>
>>>> Actually I am new in R and weak in loop operation.
>>>>
>>>> I tried to do it with dev.off () command. But I didn't
>>>> get success.
>>>> Could you please help me? Thanks a lot again.
>>>>
>>>> Orpheus
>>>>
>>>> --- Original Message ---
>>>> *From : * "Tim Appelhans"<tim.appelhans at gmail.com>
>>>> *To : * r-sig-geo at r-project.org
>>>> *Cc : * uzzal at gist.ac.kr
>>>> *Date : * 2015/08/17 Monday PM 6:49:00
>>>> *Subject : * Re: [R-sig-Geo] How to plot multiple
>>>> semi-variogram from a single dataset efficiently in R?
>>>>
>>>> Orpheus,
>>>> here's one option to get what you want.
>>>> The problem with fitting that many variograms is
>>>> that if you want to specify each variogram
>>>> individually (i.e. nugget, range, model etc.),
>>>> there is no way to automate this with loops or
>>>> thelike.
>>>> You can, however, use library(automap) to
>>>> automatically fit a variogram to your data. Then a
>>>> possible solution could look like this:
>>>>
>>>>
>>>> ### in order to use latticeCombineGrid() you need
>>>> to use ##################
>>>> ### library(devtools) to install library(Rsenal)
>>>> ##########################
>>>> # install.packages(devtools)
>>>> # library(devtools)
>>>> #
>>>> install_github("environmentalinformatics-marburg/Rsenal")
>>>> ###########################################################################
>>>>
>>>> library(sp)
>>>> library(gstat)
>>>> library(rgdal)
>>>> library(automap)
>>>> library(Rsenal)
>>>>
>>>> seoul311 <- read.csv("Downloads/seoul1to7.csv")
>>>> seoul311 <- na.omit(seoul311)
>>>>
>>>> ### first we split seoul311 by time into a list
>>>> rather than subsetting manually
>>>> seoul311_splt <- split(seoul311, seoul311$time)
>>>>
>>>> ### now we loop (using lapply()) over each
>>>> seoul311_splt entry and calculate
>>>> ### variogram using autofitVariogram and return the
>>>> variogram plot
>>>> vars <- lapply(seq(seoul311_splt), function(i) {
>>>>
>>>> dat <- seoul311_splt[[i]]
>>>> coordinates(dat) <- ~LON+LAT
>>>> proj4string(dat) <- "+proj=longlat +datum=WGS84"
>>>> dat <- spTransform(dat, CRS("+proj=utm +north
>>>> +zone=52 +datum=WGS84"))
>>>>
>>>> variogram <- autofitVariogram(PM10 ~ 1, dat)
>>>>
>>>> plt <- plot(variogram, plotit = FALSE, asp = 1)
>>>>
>>>> ### in case you do not want to fix xlim and ylim
>>>> to be identical
>>>> ### for each plot just comment out the following
>>>> line or change
>>>> ### values as you see fit
>>>> plt <- update(plt, xlim = c(-1000, 45000), ylim =
>>>> c(0, 1000))
>>>>
>>>> return(plt)
>>>> })
>>>>
>>>> ### now we actually have 23 * 7 variogram plots
>>>> which we will combine
>>>> ### into 23 hourly plots using latticeCombineGrid()
>>>> hrs <- substr(names(seoul311_splt), 9, 10)
>>>>
>>>> plts_hrs <- lapply(seq(unique(hrs)), function(j) {
>>>>
>>>> indx <- hrs %in% unique(hrs)[j]
>>>> hr_plt <- vars[indx]
>>>>
>>>> return(latticeCombineGrid(hr_plt, layout = c(3, 3)))
>>>>
>>>> })
>>>>
>>>> ### plot for hour 1
>>>> plts_hrs[[1]]
>>>>
>>>> ### plot for hour 23
>>>> plts_hrs[[23]]
>>>>
>>>> ### ...
>>>>
>>>>
>>>> HTH
>>>>
>>>> Best,
>>>> Tim
>>>>
>>>>
>>>> On 17.08.2015 09:43, Uzzal wrote:
>>>>> Actually I asked this same question to some other
>>>>> forum but unfortunate I didn't get the appropriate
>>>>> response. But I am kind of struck with this
>>>>> problem. I am giving the link of my problem
>>>>> previously posted in other forum: (really sorry
>>>>> for that)
>>>>> http://stackoverflow.com/questions/31762461/how-to-plot-multiple-semi-variogram-from-a-single-dataset-efficiently-in-r?noredirect=1#comment51767989_31762461
>>>>>
>>>>> I want variogram time wise. For example,
>>>>> thevariogram for 1.00 am of 1 march to 7 march in
>>>>> one plot. That means 7 variograms in one plot. in
>>>>> such a way there will be 23 plot contains (23*7)
>>>>> variogram. Thanks in adv! ance.
>>>>>
>>>>> Orpheus
>>>>>
>>>>>
>>>>>
>>>>> Uzzal Kumar Dash
>>>>> Master's student
>>>>> Air Quality & Climate Modeling Laboratory (AqCliMB)
>>>>> School of Environmental Science and Engineering (SESE)
>>>>> Gwangju Institute of Science and Technology (GIST)
>>>>> 123 Cheomdan-gwagiro, Buk-gu, Gwangju 500-712
>>>>> Republic of Korea
>>>>>
>>>>> web: http://aqclimb.gist.ac.kr/
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> R-sig-Geo mailing list
>>>>> R-sig-Geo at r-project.org
>>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>>>
>>>> --
>>>> #####################################
>>>> Tim Appelhans
>>>> Department of Geography
>>>> Environmental Informatics
>>>> Philipps Universität Marburg
>>>> Deutschhausstraße 12
>>>> 35032 Marburg (Paketpost: 35037 Marburg)
>>>> Germany
>>>>
>>>> Tel +49 (0) 6421 28-25957
>>>>
>>>> http://environmentalinformatics-marburg.de/
>>>>
>>>>
>>>>
>>>>
>>>> Uzzal Kumar Dash
>>>> Master's student
>>>> Air Quality & Climate Modeling Laboratory (AqCliMB)
>>>> School of Environmental Science and Engineering (SESE)
>>>> Gwangju Institute of Science and Technology (GIST)
>>>> 123 Cheomdan-gwagiro, Buk-gu, Gwangju 500-712
>>>> Republic of Korea
>>>>
>>>> web: http://aqclimb.gist.ac.kr/
>>>>
>>>>
>>>
>>> --
>>> #####################################
>>> Tim Appelhans
>>> Department of Geography
>>> Environmental Informatics
>>> Philipps Universität Marburg
>>> Deutschhausstraße 12
>>> 35032 Marburg (Paketpost: 35037 Marburg)
>>> Germany
>>>
>>> Tel +49 (0) 6421 28-25957
>>>
>>> http://environmentalinformatics-marburg.de/
>>>
>>>
>>>
>>>
>>> Uzzal Kumar Dash
>>> Master's student
>>> Air Quality & Climate Modeling Laboratory (AqCliMB)
>>> School of Environmental Science and Engineering (SESE)
>>> Gwangju Institute of Science and Technology (GIST)
>>> 123 Cheomdan-gwagiro, Buk-gu, Gwangju 500-712
>>> Republic of Korea
>>>
>>> web: http://aqclimb.gist.ac.kr/
>>>
>>>
>>
>> --
>> #####################################
>> Tim Appelhans
>> Department of Geography
>> Environmental Informatics
>> Philipps Universität Marburg
>> Deutschhausstraße 12
>> 35032 Marburg (Paketpost: 35037 Marburg)
>> Germany
>>
>> Tel +49 (0) 6421 28-25957
>>
>> http://environmentalinformatics-marburg.de/
>>
>>
>>
>>
>>
>>
>
> --
> #####################################
> Tim Appelhans
> Department of Geography
> Environmental Informatics
> Philipps Universität Marburg
> Deutschhausstraße 12
> 35032 Marburg (Paketpost: 35037 Marburg)
> Germany
>
> Tel +49 (0) 6421 28-25957
>
> http://environmentalinformatics-marburg.de/
>
>
>
>
>
>
--
#####################################
Tim Appelhans
Department of Geography
Environmental Informatics
Philipps Universität Marburg
Deutschhausstraße 12
35032 Marburg (Paketpost: 35037 Marburg)
Germany
Tel +49 (0) 6421 28-25957
http://environmentalinformatics-marburg.de/
[[alternative HTML version deleted]]
More information about the R-sig-Geo
mailing list