ggplot2 - легенда для комбинированных geom_point и geom_line - PullRequest
2 голосов
/ 17 марта 2019

Мне дан набор данных, и я хотел бы построить одну переменную в виде точек, а остальные - в виде линий с разными типами линий (каждая переменная имеет свой цвет).

 a <- c(10:20)
 df <- data.frame(a=a,b=a,c=a*a/10,d=10*sqrt(a))
 df_melt <- reshape2::melt(df,id.vars='a')

 ggplot(df_melt, aes(x=a,y=value,colour=variable,linetype=variable,shape=variable))+
           geom_line(data=subset(df_melt,variable == "b"))+
           geom_line(data=subset(df_melt,variable == "c"))+
           geom_point(data=subset(df_melt,variable == "d"))

Это дает теперь требуемый участок:

enter image description here

Тем не менее, легенда теперь показывает типы линий и формы для всех трех переменных, хотя не все переменные фактически отображают их.

Как можно соответствующим образом удалить тип или форму линии, чтобы условные обозначения соответствовали отображению графика?

1 Ответ

4 голосов
/ 17 марта 2019

В общем, если вы добавляете несколько слоев geom_line() или geom_point() с разными подмножествами, обычно есть лучший способ, который заключается в непосредственном манипулировании переменными.Здесь я сделал это, добавив NA значения для точек или линий соответственно (в scale_linetype_manual() или scale_shape_manual()), когда они должны отсутствовать.(Используемые формы / типы линий не совсем такие же, как те, что вы использовали выше, но это достаточно легко настроить.)

ggplot(df_melt, aes(x=a,y=value,colour=variable,
                    linetype=variable,shape=variable))+
    geom_point()+
    geom_line()+
    scale_linetype_manual(values=c(1,2,NA))+
    scale_shape_manual(values=c(NA,NA,2))
...