2015-03-12 2 views
0

Я пытаюсь создать линейный граф из четырех условий данных, построив среднее значение каждого условия как функцию времени. Условия меняются в дизайне 2x2, поэтому я использую geom_line (синие/красные линии, которые являются сплошными/пунктирными) и geom_point (синие/красные фигуры, которые представляют собой квадраты/круги) для построения данных. Это прекрасно работает, когда я использую слои, но я хотел бы также включать планки погрешностей в каждый момент времени:ggplot2: как объединить слои geom_line и geom_point с ошибками

pd <- position_dodge(.1) 
ggplot(data = df) + 
    geom_line(data=subset(df, condition == "A"), aes(E, avg), 
     colour="red", size=1) + 
    geom_point(data=subset(df, condition == "A"), aes(E, avg), 
     colour="red", shape=24, fill="white", size=5) + 
    geom_line(data=subset(df, condition == "B"), aes(E, avg), 
     colour="red", linetype="dashed",size=1) + 
    geom_point(data=subset(df, condition == "B"), aes(E, avg), 
     colour="red", shape=24, fill="red", size=5) + 
    geom_line(data=subset(df, condition == "C"), aes(E, avg), 
     colour="blue", size=1) + 
    geom_point(data=subset(df, condition == "C"), aes(E, avg), 
     colour="blue", shape=21, fill="white", size=5) + 
    geom_line(data=subset(df, condition == "D"), aes(E, avg), 
     colour="blue", linetype="dashed",size=1) + 
    geom_point(data=subset(df, condition == "D"), aes(E, avg), 
     colour="blue", shape=21, fill="blue", size=5) 

Приведенный выше код работает отлично. Но если бы я затем добавить в этой строке:

+ geom_errorbar(aes(x=E, ymin=avg-se, ymax=avg+se), width=.1, position=pd) 

сюжет не принимает откачивания (который был определен ранее) во внимание, и бары трудно отличить друг от друга (т.е., дублирующих друг друга). Как я могу это исправить?

+0

Сообщение об ошибке кажется довольно ясным: вы не определяете 'x' в своем вызове' aes'. – shadow

+0

Я в замешательстве - не код, который я вставил, определяет x в вызове aes как y = min = avg-se, ymax = avg + se? – ucsbcoding

+0

похоже, что вы хотите что-то вроде 'aes (x = E, ymin = avg-se, ymax = avg + se)' – shadow

ответ

2

Я полностью переписал ваш код, используя aes так, как он предполагается использовать вместе с ручными шкалами.

# sample data 
df <- data.frame(condition = rep(LETTERS[1:4], each = 5), 
       E = rep(1:5, times = 4), 
       avg = rnorm(20), 
       se = .3) 
# plotting command 
ggplot(data = df, aes(x = E, 
         y = avg, 
         color = condition, 
         linetype = condition, 
         shape = condition, 
         fill = condition)) + 
    geom_line(size=1) + 
    geom_point(size=5) + 
    scale_color_manual(values = c(A = "red", B = "red", C = "blue", D = "blue"), 
        guide = "none") + 
    scale_linetype_manual(values = c(A = "solid", B = "dashed", C = "solid", D = "dashed"), 
         guide = "none") + 
    scale_shape_manual(values = c(A = 24, B = 24, C = 21, D = 21), 
        guide = "none") + 
    scale_fill_manual(values = c(A = "white", B = "red", C = "white", D = "blue"), 
        guide = "none") + 
    geom_errorbar(aes(x = E, ymin = avg-se, ymax = avg+se, color = NULL, linetype = NULL), 
       width=.1, position=position_dodge(width = .1)) 
+0

Спасибо за помощь! – ucsbcoding

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