2013-05-01 2 views
8

Я пытаюсь построить 2 сплошные линии в 2 разных цвета для каждой группы, но также добавить пунктирные линии одного цвета вокруг этих линий, а затем добавить легенду , По какой-то причине у меня возникают проблемы с использованием «пунктирной» или «пунктирной», кажется, что я дважды рисую над пунктирными линиями. Я также не получаю легенду, я получаю ошибку Adding another scale for 'colour', which will replace the existing scale.ggplot2 нарисовать пунктирные линии того же цвета, что и сплошные линии, принадлежащие к разным группам

Не могли бы вы помочь мне выяснить, что я делаю неправильно? Ниже приведен пример набора данных и того, что я пробовал:

x <- c(10, 20, 50, 10, 20, 50) 
mean = c(52.4, 98.2, 97.9, 74.1, 98.1, 97.6) 
group = c(1, 1, 1, 2,2,2) 
upper = c(13.64, 89, 86.4, 13.64, 89, 86.4) 
lower = c(95.4, 99.8, 99.7, 95.4, 99.8, 99.7) 
data <- data.frame(x=x,y=mean, group, upper, lower) 

ggplot(data, aes(x = x, y= mean, group = as.factor(data$group), colour=as.factor(data$group))) + geom_line() + geom_point() + geom_line(data=data,aes(x=x, y=lower, group = as.factor(data$group), colour=as.factor(data$group), linetype="dotted")) + geom_line(data=data,aes(x=x, y=upper, group = as.factor(data$group), colour=as.factor(data$group), linetype="dotted")) + scale_color_manual(values=c("red", "blue")) + scale_colour_discrete(name="Groups") 

Я также попытался с geom_ribbon, опять не повезло для группирования части ...

ggplot(data, aes(x = x, y= mean, group = group)) + geom_line() + 
geom_ribbon(aes(ymin = lower, ymax = upper)) + 
geom_line(aes(y = mean), colour = "Mean")) + 
scale_colour_manual(name = "", values = c("Group1", "Group2")) 

ответ

23

Чтобы добавить пунктирные линии, которые вы должны добавить 2 geom_line() вызов, где вы указываете значения y внутри aes(). Нет необходимости ставить аргументы data= и groups=, поскольку они такие же, как и в вызове ggplot(). linetype="dotted" следует размещать за пределами aes() звонок. Для цветов вам нужен только один scale_color_manual(). Чтобы удалить шаблон с пунктирной линией из легенды, вы можете переопределить эстетику, используя функции guides() и guide_legend().

ggplot(data, aes(x = x, y= mean, group = as.factor(data$group), 
          colour=as.factor(data$group))) + 
    geom_line() + geom_point() + 
    geom_line(aes(y=lower),linetype="dotted") + 
    geom_line(aes(y=upper),linetype="dotted")+ 
    scale_color_manual(name="Groups",values=c("red", "blue"))+ 
    guides(colour = guide_legend(override.aes = list(linetype = 1))) 

enter image description here

+0

Спасибо Дидзисом! Также для объяснения! По-прежнему кажется, что сплошные линии закладываются сначала как пунктирные, а затем сплошные ... В любом случае, это намного ближе к тому, что я пытался сделать! – user2337032

+0

Это именно то, что я искал (странно создавая пунктирную линию, используя мои реальные данные, но я надеюсь, что смогу это исправить, изменив размер основных линий). Спасибо! – user2337032

+0

@ user2337032 Обновлен мой ответ, чтобы решить проблему, когда пунктирная линия была показана в легенде. –

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