[英]DateTime limits of scale_color_gradient not working only when in for loop in R
我想在基本地图(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" ...
当我一次一个星期做一次这些代码时,它们就会完全显示出我想要的内容:
美丽。 但是,当我尝试将其放入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)))中的错误:必须提供'origin'
我唯一更改的是用nm [i]交换了'2016-35'。 我尝试过多次语法转换。 我收到各种错误消息,但大多是上面的错误消息。 提供原点时,无论以哪种格式输入,都会出现以下错误。
charToDate(x)中的错误:字符串不是标准的明确格式
对此,为什么只在For循环中变得不灵通的任何线索,我们深表感谢。 我是否需要以不同的方式构造循环以读取数据? 我应该使用:
for i in seq_along(nm) #???
我迷路了!
经过更多研究,我发现了这一点。 我不得不对其进行一些重组,但是我得到了一些可行的方法。 在使用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=""))
}
通过添加首先隔离数据帧的额外步骤,它简化了我的代码,并使它平稳运行。
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.