我有多个Y系列,我想单独绘制DF,所以我写了选择一个特定的系列,分配给一个局部变量FN dat
,然后绘制它。 按fn内部调用不正确地对待它像一个系列时,然而ggplot / geom_step。 我看不出这可能是一个范围的问题,因为如果dat
是不可见的,肯定ggplot会失败?
您可以验证从顶层环境中执行的时候,而不是在函数内部的代码是正确的。 这不是一个重复的问题。 我理解这个问题(这是一个ggplot反复出现的问题),但我读过所有其他的答案; 这不是一个重复的,他们不给予解决。
set.seed(1234)
require(ggplot2)
require(scales)
N = 10
df <- data.frame(x = 1:N,
id_ = c(rep(20,N), rep(25,N), rep(33,N)),
y = c(runif(N, 1.2e6, 2.9e6), runif(N, 5.8e5, 8.9e5) ,runif(N, 2.4e5, 3.3e5)),
row.names=NULL)
plot_series <- function(id_, envir=environment()) {
dat <- subset(df,id_==id_)
p <- ggplot(data=dat, mapping=aes(x,y), color='red') + geom_step()
# Unsuccessfully trying the approach from http://stackoverflow.com/questions/22287498/scoping-of-variables-in-aes-inside-a-function-in-ggplot
p$plot_env <- envir
plot(p)
# Displays wrongly whether we do the plot here inside fn, or return the object to parent environment
return(p)
}
# BAD: doesn't plot geom_step!
plot_series(20)
# GOOD! but what's causing the difference?
ggplot(data=subset(df,id_==20), mapping=aes(x,y), color='red') + geom_step()
#plot_series(25)
#plot_series(33)