2016-06-09 3 views
0

Как и любой метод использования geom_ribbon в цикле. Я стараюсь, но встречаюсь с проблемой. Это моя попытка:Как использовать geom_ribbon в цикле

library(ggplot2) 
# Create data 
huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron)) 

m <- 1500 #weight of shadow-line 

#Base graph 
h <- ggplot(huron, aes(year))+geom_line(aes(x=year, y=level), color='blue')+theme_bw() 
count <- 5 # count shadow-lines 
start_alpha <- 0.1 # Initial aplha 

p <-h 
for (i in 0:count-1) 
{ 
    p <- p + 
    geom_ribbon(aes(ymin=level-(level/m)*i, ymax=level-(level/m)*(i+1)), alpha=start_alpha-(start_alpha/count)*i, fill='blue') 
} 
print(p) 

Я исследую результат. Кажется, что переменная i-цикла не используется по значению, а используется как указатель. Посмотрите на это:

i <- 0 
print(p) 

i <- 1 
print(p) 
+0

Я могу ошибиться, но даже с 'данными (Гурон)' как подготовка вашей выше код не в моем R v3.2.5 с 'Ошибка в Eval (выражение, ENVIR , include): object 'level' not found' - и, может быть, это было бы хорошо для тех, кто хочет помочь, когда вы во втором примере (отладка гипотезы «Указатель»). Вы показываете значения, полученные из 'print (p)' звонки – Dilettant

+1

Спасибо. print (p) - просто график графика ggplot. Strange, about LakeHuron. в строке huron <- data.frame (год = 1875: 1972, level = as.vector (LakeHuron)). Я создаю DataFrame из временных рядов –

+0

Я думаю, что одна ошибка: '0: count - 1'. Это последовательность, которая начнется с -1. bly want '0: (count - 1)'. – Gregor

ответ

0
p <- ggplot(huron, aes(year))+geom_line(aes(x=year, y=level), color='blue')+theme_bw() 
for (i in 0:(count-1)) 
{ 
p <- p + 
geom_ribbon(aes_string(ymin=p$data$level-(p$data$level/m)*i, ymax=p$data$level-(p$data$level/m)*(i+1)), alpha=start_alpha-(start_alpha/count)*i, fill='blue') 
} 
print(p)