2015-07-09 4 views
1

У меня есть данные:объект исчезает при добавлении geom_rect

Distance Average Standard.error  CI 
    -300 0.9338864  0.01409078 0.02761792 
    -150 0.9339457  0.02097350 0.04110805 
    -50 0.9495119  0.01359277 0.02664183 
    50 0.8588988  0.03599673 0.07055359 
    150 0.8531203  0.03047781 0.05973651 
    300 0.7945437  0.05874081 0.11513199 

Я создаю граф в ggplot2 код, который я до сих пор является:

ggplot(data = Test, aes(x = Distance, y = Average))+ 
    geom_errorbar(aes(ymin = Average - CI, ymax = Average + CI), width = 5)+ 
    geom_point(data = Test, aes(x = Distance, y = Average), stat = "identity", 
      point = 21, fill = "white")+ 
    scale_x_continuous(breaks = seq(-300,300,100))+ 
    scale_y_continuous(breaks = seq(0.6,1,0.05))+ 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     panel.background = element_blank(), axis.line = element_line(colour = "black"), 
     axis.text.x = element_text(colour = "black"), 
     axis.text.y = element_text(colour= "black")) 

Я хочу, чтобы добавить серый фон на графике от -300 до 0 на оси х, так что я создал этот фрейм данных:

background <- data.frame(xstart = 300, xend = 0, col = "grey") 

и затем добавили эту строку в скрипт для графа:

geom_rect(data = background, aes(xmin = xstart, xmax = xend, ymin = -Inf, ymax = Inf, 
           fill = col), alpha = 0.4) 

поэтому код для графа теперь выглядит следующим образом:

ggplot(data = Test, aes(x = Distance, y = Average))+ 
    geom_rect(data = background, aes(xmin = xstart, xmax = xend, ymin = -Inf, ymax = Inf, 
            fill = col), alpha = 0.4)+ 
    geom_errorbar(aes(ymin = Average - CI, ymax = Average + CI), width = 5)+ 
    geom_point(data = Test, aes(x = Distance, y = Average), stat = "identity", 
      point = 21, fill = "white")+ 
    scale_x_continuous(breaks = seq(-300,300,100))+ 
    scale_y_continuous(breaks = seq(0.6,1,0.05))+ 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     panel.background = element_blank(), axis.line = element_line(colour = "black"), 
     axis.text.x = element_text(colour = "black"), 
     axis.text.y = element_text(colour= "black")) 

Однако теперь я получаю сообщение об ошибке при попытке произвести график, который говорит:

Error in eval(expr, envir, enclos) : object 'Distance' not found 

График создается штрафом до того, как добавится линия geom_rect, почему добавляется, что линия делает «расстояние» исчезающим?

ответ

2

Я думаю, это потому, что geom_rect предпринимает x и y эстетики от начального ggplot вызова (даже если это не нужно или понимать их) и не может найти их в background.

Почему бы не просто подать xstart, xend и т. Д. Непосредственно, а не создавать background?

ggplot(data = Test, aes(x = Distance, y = Average))+ 
    geom_rect(aes(xmin = 0, xmax = 300, ymin = -Inf, ymax = Inf), 
            fill = 'grey', alpha = 0.4)+ 
    geom_errorbar(aes(ymin = Average - CI, ymax = Average + CI), width = 5)+ 
    geom_point(data = Test, aes(x = Distance, y = Average), stat = "identity", 
      point = 21, fill = "white")+ 
    scale_x_continuous(breaks = seq(-300,300,100))+ 
    scale_y_continuous(breaks = seq(0.6,1,0.05))+ 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     panel.background = element_blank(), axis.line = element_line(colour = "black"), 
     axis.text.x = element_text(colour = "black"), 
     axis.text.y = element_text(colour= "black")) 

Примечание - я взял «заливку» из «AES» в geom_rect так, что цвет заливки интерпретируется как буквальный цвет «серый», а не фактор, который происходит иметь значение «серый» (а затем ggplot будет использовать любую цветовую схему по умолчанию, которую он обычно использует для факторов). Думаю, вы могли бы взять все из aes позвонить в geom_rect.

+0

Это намного лучший способ сделать это. Я понимаю, что это было немного запутанно. Спасибо. – tom91

Смежные вопросы