我正在尝试创建一个函数,该函数接受2个参数并输出相应的ggplot。手动代码完美运行,但是在函数包装器内无法运行。
我尝试通过将未找到的对象强制转换为字符串来进行纠正,这些对象被添加到ggplot中。然而,这反过来会产生不同形式的麻烦。
我正在尝试绘制“Statusint”变量(表示状态整数,范围从1(良好交通)到5(糟糕交通))与“Time”变量的关系。 "时间"格式为Posix,因此我创建了一个名为"TimeVector"的数字向量,仅用于在ggplot中绘图。
函数如下:
我看到一些建议建议使用print,因为ggplot不是在命令行中调用的。然而,这并不能解决上述的错误。
这是我在stackoverflow上的第一个帖子,请指出我如何更好地为将来格式化问题。谢谢。
返回的错误是:
Error in eval(expr, envir, enclos) : object 'TimeVector' not found
我尝试通过将未找到的对象强制转换为字符串来进行纠正,这些对象被添加到ggplot中。然而,这反过来会产生不同形式的麻烦。
Error: Discrete value supplied to continuous scale
去掉 scale_x_continuous(breaks=0:24) 后可以解决第二个错误,但是会输出一个空图表,这表明 ggplot 没有得到任何数据。
数据是一个按时间分组的交通密度观测值的大型数据框,如下所示:
ID Road Status Time Statusint Day Months Year Weekday
1 Me7war To Sheikh Zayid Orange 2012-10-01 00:03:00 3 1 October 12 Monday
1 Me7war To Sheikh Zayid Green 2012-10-01 05:00:00 2 1 October 12 Monday
1 Me7war To Sheikh Zayid Yellow 2012-10-01 05:24:00 5 1 October 12 Monday
我正在尝试绘制“Statusint”变量(表示状态整数,范围从1(良好交通)到5(糟糕交通))与“Time”变量的关系。 "时间"格式为Posix,因此我创建了一个名为"TimeVector"的数字向量,仅用于在ggplot中绘图。
函数如下:
Plotroad <- function( roadID , Day ) {
*** Working Code ***
else {
### THE PROBLEM CODE: Everything below works manually, but returns an error in the function
Roadsubset <- October[October$ID == as.numeric(roadID), ]
Timesubset <- subset(Roadsubset, format(Roadsubset$Time,'%d') == "Day" )
TimeVector <- as.numeric(gsub(":" , "." , strftime(Timesubset$Time, format="%H:%M")))
ggplot(Timesubset, aes( x = "TimeVector", y = "Timesubset$Statusint")) + geom_point() +
stat_smooth() + scale_x_continuous(breaks=0:24)
### The working code:
Roadsubset <- October[October$ID == as.numeric(roadID), ]
Timesubset <- subset(Roadsubset, subset = Roadsubset$Day == as.integer(Date) )
TimeVector <- as.numeric(gsub(":" , "." , strftime(Timesubset$Time, format="%H:%M")))
Timesubset$timevector <- TimeVector
print(ggplot( data = Timesubset, aes_string( x = "timevector" , y = "Statusint" )) + geom_point() + stat_smooth() + scale_x_continuous(breaks=0:24) + labs(list(title = as.character(Timesubset$Road[1]) , x = "Time of Day", y = "Status")))
}
}
我看到一些建议建议使用print,因为ggplot不是在命令行中调用的。然而,这并不能解决上述的错误。
这是我在stackoverflow上的第一个帖子,请指出我如何更好地为将来格式化问题。谢谢。
aes_string
? - RolandError in parse(text = x)[[1]] : subscript out of bounds
- M. Momtaz Hegazyaes( x = "TimeVector", y = "Timesubset$Statusint"))
改成aes_string( x = "TimeVector", y = "Statusint"))
,我认为你不应该在aes()函数中一直添加数据引用。这里有一个类似的问题。 - marbeldata.frame
,采用长格式。同时查看这个问题,了解如何创建可重现的示例。 - marbel