আর এ্যানিমেটেড মানচিত্র


9

সকলেই, অস্থিরতার জন্য দুঃখিত, তবে আমি একটি নতুন সমস্যার মুখোমুখি হয়ে নতুন সমস্যার মুখোমুখি হচ্ছি: আমি রাশিনের একটি অ্যানিমেটেড মানচিত্র তৈরি করতে চাই, যেমন বিভিন্ন বছরের সাথে বেকারত্বের পরিবর্তন। চিত্রটিতে আপনি এক বছরের জন্য ডেটা দেখতে পারেনএখানে চিত্র বর্ণনা লিখুন

require(sp)
require(maptools)

require(RColorBrewer)
require(rgdal)
 rus<-url("http://www.filefactory.com/file/4h1hb5c1cw7r/n/RUS_adm1_RData")
print(load(rus))


unempl <- read.delim2(file="C:\\unempl1.txt", header = TRUE, 
        sep = ";",quote = "", dec=",", stringsAsFactors=F)

gadm_names <-gadm$NAME_1
total <- length(gadm_names)
pb <- txtProgressBar(min = 0, max = total, style = 3) 

order <- vector()
for (i in 1:total){  

  order[i] <- agrep(gadm_names[i], unempl$region, 
                     max.distance = 0.2)[1]
 setTxtProgressBar(pb, i)               # update progress bar
}


col_no <- as.factor(as.numeric(cut(unempl$data[order],
                    c(0,2.5,5,7.5,10,15,100))))


levels(col_no) <- c("<2,5%", "2,5-5%", "5-7,5%",
                    "7,5-10%", "10-15%", ">15%")


gadm$col_no <- col_no
myPalette<-brewer.pal(6,"Purples")



proj4.str <- CRS("+init=epsg:3413 +lon_0=105")
gadm.prj <- spTransform(gadm, proj4.str)

spplot(gadm.prj, "col_no", col=grey(.9), col.regions=myPalette,
main="Unemployment in Russia by region")

ফলাফলটি, যা আমি পেতে চাই তা এখানে অ্যানিমেশনের মতো কিছু: http://spatial.ly/2011/02/mapping-londons- জনসংখ্যা- পরিবর্তন २०१১-২০১০/ তবে, আমি অনেকটা গুগল করেছি, বেশ কয়েকটি থিম পড়েছি মধ্যে http://stackoverflow.com : নিম্নোক্ত সহ দ প্লট একটি সিরিজ থেকে একটি চলচ্চিত্র তৈরি করার , কিন্তু এখনও অধিকার জিনিস করতে পারে না।

তুমাকে অগ্রিম ধন্যবাদ!

আমি এই জাতীয় কিছু নিয়ে এসেছি, কেউ দয়া করে আমাকে বলতে পারেন ভুলটি কোথায়:

require(animation)
    require(sp)
    require(RColorBrewer) 
    require(classInt)     
require(rgdal)
 rus<-url("http://www.filefactory.com/file/4h1hb5c1cw7r/n/RUS_adm1_RData")
print(load(rus))




unempl1 <- read.delim2(file="C:\\unempl11.txt", header = TRUE, 
        sep = ";",quote = "", dec=",", stringsAsFactors=F)
unempl2<- read.delim2(file="C:\\unempl12.txt", header = TRUE, 
        sep = ";",quote = "", dec=",", stringsAsFactors=F)

gadm_names <-gadm$NAME_1


total <- length(gadm_names)
pb <- txtProgressBar(min = 0, max = total, style = 3) 

order <- vector()

for (i in 1:total){  

  order[i] <- agrep(gadm_names[i], unempl1$region, 
                     max.distance = 0.2)[1]
 setTxtProgressBar(pb, i)               # update progress bar
}


for (l in 1:total){  

  order[l] <- agrep(gadm_names[l], unempl2$region, 
                     max.distance = 0.2)[1]
 setTxtProgressBar(pb, i)               # update progress bar
}

col_no_1 <- as.factor(as.numeric(cut(unempl1$data[order],
                    c(0,2.5,5,7.5,10,15,100))))

col_no_2<- as.factor(as.numeric(cut(unempl2$data[order],
                    c(0,2.5,5,7.5,10,15,100))))
saveHTML(
      for(k in 1:2) {
        try<-get(paste("col_no_", k, sep = ""))

levels(try) <- c("<2,5%", "2,5-5%", "5-7,5%",
                    "7,5-10%", "10-15%", ">15%")


gadm$col_no <- try

myPalette<-brewer.pal(6,"Purples")



proj4.str <- CRS("+init=epsg:3413 +lon_0=105")
gadm.prj <- spTransform(gadm, proj4.str)

spplot(gadm.prj, "col_no", col=grey(.9), col.regions=myPalette,
main="Unemployment in Russia by region")
},img.name = "map", htmlfile = "unrus2.html")

কোডটি পুনরুত্পাদন করতে সক্ষম হতে এখানে ডেটা


পুনরায় সম্পাদনা: কোড নিয়ে কী ভুল হচ্ছে?
হোবার

আপনার উদাহরণটি পুনরুত্পাদনযোগ্য না হওয়ায় সমস্যা সমাধান করা কঠিন। কয়েকটি জিনিস ঝাঁপিয়ে পড়ুন 1) আপনি একটি লুপের মধ্যে একটি স্থানিক রূপান্তর প্রয়োগ করছেন, তাই আপনি এটি বারবার করছেন 2) আপনি "ট্রাই" নামক একটি বস্তু তৈরি করছেন যা একটি আর ফাংশন 3) আপনি প্রকৃত কলামের নামগুলির মাধ্যমে পুনরাবৃত্তি করতে পারেন ।, (আই সি ইন ("ভার 1", "ভার 2")) এর জন্য আপনি বর্তমানে যেভাবে কোডিং করেছেন তা খুব সংশ্লেষিত 4) এস্পপ্লোতে আপনার কলটি সঠিক নয়, আপনি এটিকে একটি বাজে ভেক্টর দিয়ে যাচ্ছেন।
জেফরি ইভান্স

আমি এ জাতীয় বোধগম্য হওয়ার জন্য সত্যই দুঃখিত, তবে এটি আর এর সাথে আমার প্রথম আসল অভিজ্ঞতা, আমি মূল প্রশ্নের মধ্যে ডেটা যুক্ত করেছি, যদি এটি আপনাকে বিরক্ত না করে তবে আপনি দয়া করে উন্নতির উপায়গুলি পরামর্শ দিতে পারেন কারণ আমি সত্যিই ধারণা দৌড়ে হিসাবে
Ruvin Rafailov

উত্তর:


4

এটি আমি যতদূর যেতে পারি। আপনি এই কোডের উপর ভিত্তি করে এটি নির্ধারণ করতে সক্ষম হওয়া উচিত। আবারও, যেহেতু আপনার সমস্যাটি পুনরায় উত্পাদনযোগ্য নয়, সমাধানটি চিত্রিত করার জন্য আমাকে ডামি ডেটা তৈরি করতে হয়েছিল। এসপ্লট ব্যবহার করার একটি স্বতন্ত্র দিকটি হ'ল যেহেতু এটি প্লট তৈরি করতে ল্যাটিস ব্যবহার করে আপনাকে একটি বস্তু তৈরি করতে হবে এবং তারপরে অবজেক্টটি মুদ্রণ করতে হবে। অন্যথায় আপনি একটি প্লট পাবেন না।

require(animation)
require(sp)
require(RColorBrewer) 
require(classInt)     
require(rgdal)

load(url("http://www.filefactory.com/file/4h1hb5c1cw7r/n/RUS_adm1_RData"))
closeAllConnections()

# Set color palette
myPalette <- brewer.pal(6,"Purples")

# Reproject data
gadm <- spTransform(gadm, CRS("+init=epsg:3413 +lon_0=105"))

# Create dummy unployment data with 10% change in gadm object 
gadm@data$uemp2000 <- runif(dim(gadm)[1],0,50)
gadm@data$uemp2001 <- gadm@data$uemp2000 + (gadm@data$uemp2000 * 0.10) 
gadm@data$uemp2002 <- gadm@data$uemp2001 + (gadm@data$uemp2001 * 0.10) 
gadm@data$uemp2003 <- gadm@data$uemp2002 + (gadm@data$uemp2002 * 0.10) 
gadm@data$uemp2004 <- gadm@data$uemp2003 + (gadm@data$uemp2003 * 0.10) 
gadm@data$uemp2005 <- gadm@data$uemp2004 + (gadm@data$uemp2004 * 0.10) 

# Coerce into factors with defined levels
for( i in c("uemp2000","uemp2001","uemp2002","uemp2003","uemp2004","uemp2005") ) {
  gadm@data[,i] <- as.factor(as.numeric(cut(gadm@data[,i], 
                             c(0,2.5,5,7.5,10,15,100)))) 
    levels(gadm@data[,i]) <- c("<2,5%", "2,5-5%", "5-7,5%",
                               "7,5-10%", "10-15%", ">15%")                          
    } 

saveHTML(
  for(i in c("uemp2000","uemp2001","uemp2002","uemp2003","uemp2004","uemp2005")) {
    sp.plot <- spplot(gadm, i, col=grey(.9), col.regions=myPalette,
                      main=paste("Unemployment in Russia", i, sep=" - ") )
      print( sp.plot )
},img.name = "map", htmlfile = "unrus2.html")

ধন্যবাদ! আমি সঙ্গে সঙ্গে এটি চেষ্টা করব। কেবলমাত্র একটি প্রশ্ন gadm @ ডেটা $ uemp2001 <- gadm @ ডেটা $ uemp2000 + (gadm @ ডেটা $ uemp2000 * 0.10) আমি এখানে প্রদত্ত এলোমেলো পরিবর্তে txt ডেটা লোড করতে পারি, কোনও সমস্যা সমাধান হবে না?
রুভিন রাফায়েলভ

হ্যাঁ, এই কোডটি কেবল উদাহরণস্বরূপ ডেটা তৈরির সাথে সম্পর্কিত। আপনি নিজের ডেটা ব্যবহার করতে চান
জেফ্রি ইভান্স

9

কটাক্ষপাত অ্যানিমেশন প্যাকেজ। অন্বেষণ করার মতো একটি কার্য, যার জন্য তৃতীয় পক্ষের সফ্টওয়্যার প্রয়োজন হয় না, সেটি হল "সেভ এইচটিএমএল"।

অ্যানিমেশন প্যাকেজে "সেভএইচটিএমএল" ফাংশনটি ব্যবহার করা খুব সোজা এগিয়ে। এখানে কোডের উদাহরণ যেখানে আমি একটি এলোমেলো জনসংখ্যার পরিবর্তনের একটি অ্যানিমেশন তৈরি করি। "এক্সপ্রেস" যুক্তিটি আপনি অ্যানিমেশনে যেতে চান এমন প্লট ফাংশনটিকে সংজ্ঞায়িত করে। যেমন আপনি নীচের কোডটিতে দেখতে পাচ্ছেন প্রতিটি সিমুলেটেড কলাম প্লট করার জন্য আমি লুপের জন্য ব্যবহার করেছি।

    require(animation)
    require(sp)
    require(RColorBrewer) 
    require(classInt)     

# Load your data and add random population change column
    load(url("http://www.gadm.org/data/rda/GBR_adm2.RData"))
      for( i in 1:10 ) {
        gadm@data[paste("Year",i, sep="")] <- runif(dim(gadm)[1],0,1) 
       }

# Create HTML animation using for loop for each simulated column    
    saveHTML(
      for(x in names(gadm@data)[19:28]) { 
      ani.options(interval = 0.5)  
       plotvar <- gadm@data[,x]
          nclr <- 9
         plotclr <- rev(brewer.pal(nclr,"BuPu"))
          cuts <- classIntervals(plotvar, style="fixed", 
               fixedBreaks=c(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1))
               colcode <- findColours(cuts, plotclr)
          plot(gadm, col=colcode, border=NA, ylim=c(bbox(gadm)[,1][2], bbox(gadm)[,2][2]),
            xlim=c(bbox(gadm)[,1][1], bbox(gadm)[,2][1]))
            text(min(bbox(gadm)[1]), min(bbox(gadm)[2]), paste("Population Change",x,sep=" "))
          box()
        legend("topleft", legend=c("0-10%","10-20%","20-30%","30-40%","40-50%",
               "50-60%","60-70%","70-80%","80-100%"),
                 fill=attr(colcode, "palette"), cex=0.6, bty="n")   
        ani.pause() 
        },
           img.name="RandPopChange", htmlfile="SimPopChange.html",
           single.opts = "'controls': ['first', 'previous', 'play', 'next', 'last', 'loop', 'speed'], 'delayMin': 0",      
            description=c("Random population change:"))  

বহুভুজ কলামের উপর ভিত্তি করে আরও প্রাসঙ্গিক উদাহরণ সরবরাহ করতে আমি পোস্টটি সম্পাদনা করেছি।


আপনাকে ধন্যবাদ, তবে, এই প্রশ্নটি অন্বেষণ করা শুরু করে আমি এটিই প্রথম করলাম, তবে এটি আমাকে ফলাফল দেয়নি কারণ কোন যুক্তি হিসাবে কোন ভাব প্রকাশ করা উচিত তা আমি বুঝতে পারি না।
রুভিন রাফাইলভ

ওহ, আমি মনে করি এটি উপযুক্ত, ডেটা প্রস্তুতি সম্পন্ন হওয়ার সাথে সাথে আমার প্রয়োজনগুলির জন্য অনুকূল করতে চেষ্টা করবে। আপনাকে অনেক ধন্যবাদ, এটি কাজ করার সাথে সাথেই আমি একটি উত্তর গ্রহণ করব will এবং কেবল তাত্ক্ষণিকভাবে উত্থাপিত প্রশ্নটি: কী এখানে চক্রান্তের পরিবর্তে এসপ্লট ব্যবহার করা সম্ভব, আপনি চেষ্টা করেননি?
রুভিন রাফাইলভ

আপনার কোড সম্পর্কিত আমার ধারণাগুলি দেখানোর জন্য আমি প্রধান প্রশ্নটি সম্পাদনা করেছি, তবে আমি নিশ্চিত যে এটি ঠিকমত কাজ করে না বলে আমি বেশ কয়েকটি ভুল করেছি। আপনি এই সাহায্য করতে পারেন?
রুভিন রাফাইলভ

7

আপনি যে অ্যানিমেশনটি সংযুক্ত করেছেন (নীচে) তা একটি অ্যানিমেটেড জিআইএফ চিত্র

এখানে চিত্র বর্ণনা লিখুন

এটি মূলত চক্রযুক্ত চিত্রগুলির একটি সিরিজ যা অ্যানিমেশন প্রভাব তৈরি করে। এটিকে প্রতিটি সেকেন্ড বা একেকটি স্লাইডের মাধ্যমে ক্লিক করার মতো ভাবেন।

অ্যানিমেশন তৈরি করতে আপনাকে যা করতে হবে তা হ'ল:

1) প্রতিটি স্বতন্ত্র 'ফ্রেম' তৈরি করুন যা প্রদর্শিত হবে।

2) জিআইএফ নিজে তৈরি করুন। বেশ কয়েকটি ওয়েবসাইট রয়েছে যা এটি আপনার জন্য করবে:

http://www.createagif.net/

http://makeagif.com/

এই ওয়েবসাইটগুলির বেশিরভাগই আপনাকে অ্যানিমেশনের আকার এবং গতি নিয়ন্ত্রণ করতে দেয়।

Stackoverflow প্রশ্ন লিঙ্ক সবকিছু আপনি আপনাকে প্রথমে একটি 3rd পার্টি প্যাকেজটি ইনস্টল করতে হবে আর নোটিশ এই কাজের সম্পাদন করতে জানতে হবে সঙ্গে আপনি প্রদান করা উচিত।

সম্পাদনা : নীচে উপরে স্ট্যাকওভারফ্লো লিঙ্ক থেকে কোডের একটি আপডেট সংস্করণ রয়েছে যেহেতু মনে হচ্ছে কিছুটা বিভ্রান্তি রয়েছে।

jpeg("/tmp/foo%02d.jpg")
for (i in 1:5) {
  my.plot(i)
}      
make.mov <- function(){
     unlink("plot.mpg")
     system("convert -delay 0.5 plot*.jpg plot.mpg")
}

dev.off()

এই উপরের কোডটি আপনি আর-তে তৈরি প্রতিটি পৃথক প্লট গ্রহণ করে এবং প্রতিটি লুপিং করে এবং চিত্রম্যাগিক ব্যবহার করে এনিমেশনে রূপান্তরিত করে , যা অবশ্যই আপনার ইনস্টল করা উচিত।


আপনাকে ধন্যবাদ, তবে আমি অন্য ধরণের ওয়েবসাইট ছাড়া আর এর অভ্যন্তরে কাজ করার জন্য এক ধরণের অ্যানিমেশন প্রয়োজন এবং স্টকওভারফ্লোতে এই কোড এবং ধারণাটি কীভাবে কাজ করে তা আমি সত্যিই বুঝতে পারি না অন্যথায় আমি এমনকি জিজ্ঞাসাও করতে পারি না
রুভিন রাফাইলভ

আমি মনে করি স্ট্যাক এক্সচেঞ্জের উত্তরটি কিছুটা বিভ্রান্তিকর হতে পারে কারণ উত্তরটি পাঠ্যের একটি ব্লকের পাশাপাশি কোডটি ভেঙে দেয়। আমি আমার উত্তরটি সেই কোডটির একটি আপডেট সংস্করণ দিয়ে সম্পাদনা করব।
রাডার

আপডেটের জন্য ধন্যবাদ, তবে এখনও অনেকগুলি সমস্যা রয়েছে, যা নির্বোধ এবং সহজ হতে পারে, তবে দুর্ভাগ্যক্রমে এগুলি পরিচালনা করার আমার অভিজ্ঞতা নেই। যদি আপনি কিছু মনে করেন না তবে আমি জিজ্ঞাসা করব: 1) এই কোডটিতে জেপিগ (...) এর অর্থ কী? রুস্তুদিও ফাইলটি ওপেন করতে না পারার ভুল হিসাবে জানিয়েছে 2) রাস্তুদিও আমার.প্লট ফাংশনটির অস্তিত্ব সম্পর্কে জানায়, যদিও এখানে সমস্ত কিছু ইনস্টল করা আছে। যদি আমি ভুলভাবে অপারেশন করি তবে আমি হতে পারি যদি আপনি দয়া করে কিছু পরামর্শ দিতে পারেন। আগাম ধন্যবাদ.
রুভিন রাফায়েলভ

2

উত্তরটি এখানে , অস্কার পের্পিয়েনকে ধন্যবাদ।

library(sp)
library(rgdal)
library(spacetime)
library(animation)
rus <- url("http://www.filefactory.com/file/4h1hb5c1cw7r/n/RUS_adm1_RData")
load(rus)
proj4.str <- CRS("+init=epsg:3413 +lon_0=105")
gadm.prj <- spTransform(gadm, proj4.str)
N <- nrow(gadm.prj)
pols <- geometry(gadm.prj)
nms<-gadm$NAME_1
vals1  <- read.csv2("C:\\unempl11.txt")
ord1 <- match(nms, vals1$region)
vals1 <- vals1[ord1,]

vals2 <- read.csv2("C:\\unempl12.txt")
ord2 <- match(nms, vals2$region)
vals2 <- vals2[ord2,]

nDays <- 2
tt <- seq(as.Date('2011-01-01'), by='year', length=nDays)
vals <- data.frame(unempl=rbind(vals1, vals2)[,-1])

gadmST <- STFDF(pols, time=tt, data=vals)



stplot(gadmST, animate=1, do.repeat=FALSE)

saveHTML(stplot(gadmST, animate=1, do.repeat=FALSE)
, img.name = "unemplan",  htmlfile = "unan.html")

ওহ, আমি স্পেসটাইম লাইব্রেরির ব্যবহার পছন্দ করি!
জেফ্রি ইভান্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.