2016-10-16 11 views
0

ベースマップ(TMap)に対して複数のマップを生成したいと思います。基本的に同じ地図ですが、週別に分類されています。scale_color_gradientのDateTimeの制限は、forループの中でのみ機能しません。

library(ggplot2) 
library(ggmap) 
library(lubridate) 

map=TMap + geom_point(aes(x=Lon, y=Lat, size=count, color=as.Date(y$`2016-35`$DateTime)), data=y$`2016-35`, alpha=1) + 
scale_colour_gradient(limits=as.Date(c(min(y$`2016-35`$DateTime), max(y$`2016-35`$DateTime))),low="navy", high="orange", name="Date", trans="date") 
ggsave(map,path=dir,filename = paste("l","test",".png", sep="")) 

Y =私が働いているデータフレームのリストです:

さて、ここでの基本コードです。

'2016-35' =これはちょうど1週間のデータ、つまりyリストのデータフレームの1つです。

データフレームのそれぞれ次のようになります。

Tower Tag_ID  HourID count week  Lon  Lat   DateTime day 
T01  53 2016-38_3_22 95 2016-38 -94.44542 42.81252 2016-09-21 22:00:00 Wed 
T01  53 2016-38_4_1 95 2016-38 -94.44542 42.81252 2016-09-22 01:00:00 Thurs 
T01  53 2016-35_7_22 82 2016-35 -94.44542 42.81252 2016-08-28 22:00:00 Sun 
T01  53 2016-35_7_21 177 2016-35 -94.44542 42.81252 2016-08-28 21:00:00 Sun 
T01  53 2016-35_6_1 143 2016-35 -94.44542 42.81252 2016-09-03 01:00:00 Sat 


> str() 
'data.frame': 671 obs. of 9 variables: 
$ Tower : chr "T01" "T01" "T01" "T01" ... 
$ Tag_ID : int 53 53 53 53 53 53 53 53 53 53 ... 
$ HourID : chr "2016-38_3_22" "2016-38_4_1" "2016-35_7_22" "2016-35_7_21" ... 
$ count : int 95 95 82 177 143 103 75 85 107 162 ... 
$ week : chr "2016-38" "2016-38" "2016-35" "2016-35" ... 
$ Lon  : num -94.4 -94.4 -94.4 -94.4 -94.4 ... 
$ Lat  : num 42.8 42.8 42.8 42.8 42.8 ... 
$ DateTime: POSIXct, format: "2016-09-21 22:00:00" "2016-09-22 01:00:00" ... 
$ day  : chr "Wed" "Thurs" "Sun" "Sun" ... 

私は一度に1週間それらを行う場合には、このコードは、私がしたい正確に何吐き出す:

enter image description here

BEA-美しい。しかし、それをforループに入れてみると、すべてsh * tになります。 ()C(分(のy $のNM [i]は$のDateTime)、最大(のy $のNM [i]は$のDateTime))as.Date.numericで エラー:

dir=choose.dir() 
nm <- names(y) 
for (i in 1:length(nm)) { 
    map=TMap + geom_point(aes(x=Lon, y=Lat, size=count, color=as.Date(y$nm[i]$DateTime)), data=y$nm[i], alpha=1) + 
    scale_colour_gradient(limits=as.Date(c(min(y$nm[i]$DateTime), max(y$nm[i]$DateTime))),low="navy", high="orange", name="Date", trans="date") 
    ggsave(map,path=dir,filename = paste("l",nm[i],".png", sep="")) 
} 

私は、次のエラーメッセージが表示されます: 'origin'を指定する必要があります

私が変更したのは、nm16 [35]と[2016-35]を入れ替えただけです。私は構文の周りにシフトしてみました。私はさまざまなエラーメッセージを受け取りますが、それは主に上記のものです。私は、原点を供給するとき、それは私がそれを置くどのような形式に関係なく、私は次のエラーを与えない

charToDateでエラーが発生しましたが、(X):。 文字列が

どれ手がかりにとして標準明確なフォーマットではありませんなぜこれがForループでうごめくだけになっているのか、大変感謝しています。ループを構造化してデータを読み込む必要がありますか?私は以下を使用する必要があります:

for i in seq_along(nm) #??? 

私は迷っています!

答えて

0

もう少し調査した後、私はこれを理解しました。私は少しそれを再構成しなければならなかったが、私は動作するものを得た。 print()を使ってマッピングコードを実行する前に、各データフレームを解析しています。

for (name in names(y)) { 
    q= print(y[[name]]) 
    map=TMap + geom_point(aes(x=Lon, y=Lat, size=count, color=as.Date(DateTime)), data=q, alpha=1) + 
    scale_colour_gradient(limits=as.Date(c(min(q$DateTime), max(q$DateTime)), origin = "1970-01-01"),low="navy", high="orange", name="Date", trans="date") 
    ggsave(map,path=dir,filename = paste("l",print(name),".png", sep="")) 
} 

データフレームを最初に隔離する追加ステップを追加することで、自分のコードが複雑にならず、スムーズに実行できるようになりました。

幸運を祈る!

関連する問題