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/ [[alternative HTML version deleted]]