我想在基本地图(TMap)上生成多个地图。基本上,相同的地图,但按周分类。
好的,这是基本代码:
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'=这只是一周的数据,即y列表中的一个数据帧。
每个数据框如下所示:
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" ...
当我一次这样做一周时,这段代码完全吐出我想要的东西:
B-E-A-utiful。但是,当我尝试将它放入for循环时,一切都转到sh * t。
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=""))
}
我收到以下错误消息: as.Date.numeric中的错误(c(min(y $ nm [i] $ DateTime),max(y $ nm [i] $ DateTime))): 必须提供“原产地”
我改变的唯一一件事是用nm [i]交换'2016-35'。我尝试过多次转换语法。我收到了各种错误消息,但主要是上面的错误消息。当我提供原点时,无论我把它放入什么格式,它都会给我以下错误。
charToDate(x)出错: 字符串不是标准的明确格式
为什么这只是在For循环中变得不稳定的任何线索都非常感谢。我是否需要以不同方式构造循环以便读取数据?我应该使用:
for i in seq_along(nm) #???
我迷路了!
答案 0 :(得分: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=""))
}
通过添加首先隔离数据帧的额外步骤,它使我的代码简单并使其顺利运行。
祝你好运!