Uzzal,
I see that in your lapply() call you create an object called 'plot'.
This is bad practice as 'plot' is reserved for a function call in base R
and may get you in trouble in certain circumstances. That is why in the
code I gave you (and in the code that follows) this object is called
'plt' rather than plot.
The following will create a variogram for every hour of each day, label
them according to YYYY-mm-dd HH:MM:SS (standard POSIX datetime format)
and save each as a file following a naming convetion of
'plot_YYYYmmddHH.png' to avoid spaces in the file names.
library(sp)
library(gstat)
library(rgdal)
library(automap)
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)
a<-as.POSIXct(names(seoul311_splt), format="%Y%m%d%H")
a
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)
plt <- update(plt, main = paste("Variogram for", as.character(a[i])))
return(plt)
})
for (i in seq(names(seoul311_splt))) {
png(paste0("plot_", names(seoul311_splt)[i], ".png"),
width = 25, height = 25, units = "cm", res = 300)
print(vars[[i]])
dev.off()
}
HTH
Tim
On 27.08.2015 12:25, Uzzal wrote:
Dear Tim, after getting lots of help from you, I was trying to
plot all variogram in different plot with different name (1 variogram
per plot). I was trying to naming those variogram like "variogram for
20120301 01:00", "variogram for 20120301 02:00".......etc.
I improvised your code in the following way (below) but didn't get
success! Is it possible to plot different variogram in different plot
with different name and save it in a single loop? Thanks a lot for
your valuable time.
a<-as.POSIXct(names(seoul311_split), format="%Y%m%d%H")
a
hours<-substr(a,1,16)
hours
vars<-lapply(seq(seoul311_split), function(i)
{
dat<-seoul311_split[[i]]
coordinates(dat)<-~LON+LAT
proj4string(dat) <- "+proj=longlat +datum=WGS84"
dat <- spTransform(dat, CRS("+proj=utm +north +zone=52 +datum=WGS84"))
variogram<-autofitVariogram(log(PM10)~1,dat, model="Sph")
plot<- plot(variogram,plotit=FALSE, asp=1,
main= paste("Semivariogram for", hours[i]))
return(plot)
})
Uzzal
--- Original Message ---
*From : * "Uzzal"<uzzal at gist.ac.kr>
*To : * "Tim Appelhans"<tim.appelhans at gmail.com>,
"r-sig-geo"<r-sig-geo at r-project.org>
*Date : * 2015/08/27 Thursday AM 1:44:12
*Subject : * Re: Re: [R-sig-Geo] How to plot multiple
semi-variogram from a single dataset efficiently in R?
Thank you vary much. Now its totally working!
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 5:22:39
*Subject : * Re: [R-sig-Geo] How to plot multiple
semi-variogram from a single dataset efficiently in R?
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/
##################################### 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]]