2016-07-19 2 views
1

У меня есть три таблицы:Как график с geom_ribbon

Upper Bound 
    Q  C 
    1  30 
    2  50 
    3  40 

Lower Bound  
    Q  C  
    1  10 
    2  15  
    3  20 

Неверные данные:

Q  C  Name 
1  50  Sample 1 
2  40  Sample 1 
3  30  Sample 1 
1  0  Sample 2 
2  60  Sample 2 
3  5  Sample 2 

Я хочу график, который показывает на графике снизу и сверху в серый цвет и заполняет все между ними и график плохие образцы сверху с разными цветами и легендой:

plot <- ggplot(Bad_Data, aes(x = Bad_Data$Q, y = Bad_Data$C, group = 1)) 
plot + geom_line(aes(color = N)) + geom_ribbon(aes(ymin = Lower_Bound$C, ymax = Upper_Bound$C)) 

Я пробовал, но это дало мне эту ошибку:

Error: Aesthetics must be either length 1 or the same as the data (624): ymin, ymax, x, y, group

Кто может мне помочь?

+0

Вам не нужна часть 'Bad_Data $' внутри' aes'. – Jaap

+1

Поместите все свои данные в один фрейм данных с столбцами Q, C, Name, Upper и Lower. Не используйте 'data $ column' внутри' aes() ', просто используйте имена без кавычек. – Gregor

ответ

1

Здесь вы можете настроить цвета и другие параметры, чтобы получить динамику точно так, как вам нравится. Я добавил несколько эстетику с описанием того, что каждый делает:

#Prepare 
Bad_Data$Lower_Bound <- Lower_Bound$C 
Bad_Data$Upper_Bound <- Upper_Bound$C 

#Plot 
library(ggplot2) 
p <- ggplot(Bad_Data, aes(x = Q, y = C, color=Name, group=Name)) 
p <- p + geom_line() 
p + geom_ribbon(aes(ymin=Lower_Bound, ymax=Upper_Bound), 
       alpha=0.1,  #transparency 
       linetype=1,  #solid, dashed or other line types 
       colour="grey70", #border line color 
       size=1,   #border line size 
       fill="green") #fill color 

enter image description here данных

Вот данные:

Upper_Bound <- read.table(text="Q  C 
1  30 
          2  50 
          3  40", header=T) 

Lower_Bound <- read.table(text="Q  C  
          1  10 
          2  15  
          3  20", header=T) 

Bad_Data <- read.table(text="Q  C  Name 
         1  50  Sample1 
         2  40  Sample1 
         3  30  Sample1 
         1  0  Sample2 
         2  60  Sample2 
         3  5  Sample2", header=T) 

Редактировать

препарат Безопаснее :

Bad_Data$Lower_Bound <- Lower_Bound$C[match(Bad_Data$Q, Lower_Bound$Q)] 
Bad_Data$Upper_Bound <- Upper_Bound$C[match(Bad_Data$Q, Upper_Bound$Q)] 
+0

дает мне эту ошибку Ошибка: Эстетика должна быть либо длиной 1, либо такими же, как данные (624): ymin, ymax, x, y, color, group – Arya

+0

Я разместил данные внизу. Вы использовали этот пример? Или вы использовали свои реальные данные? –

+0

Я опубликовал данные, которые я использовал, и вывод, чтобы показать, что он действительно работает. Если это не работает с вашими фактическими данными, вы, по крайней мере, знаете, что это возможно и как это работает. –

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