2016-02-19 4 views
0
require(reshape2);require(ggplot2) 
df <- data.frame(time = 1:10, 
       x1 = rnorm(10), 
       x2 = rnorm(10), 
       x3 = rnorm(10), 
       y1 = rnorm(10), 
       y2 = rnorm(10)) 
df <- melt(df, id = "time") 


ggplot(df, aes(x = time, y = value, color = variable, group = variable, 
       size = variable, linetype = variable)) + 
    geom_line() + 
    scale_linetype_manual(values = c(rep(1, 3), 2, 2)) + 
    scale_size_manual(values = c(rep(.3, 3), 2, 2)) + 
    scale_color_manual(values = c(rep("grey", 3), "red", "green")) + 
    theme_minimal() 

ggplot2 imgR: ggplot2 удаление некоторых легенд записей

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

Я попытался установить scale_color_discrete(breaks = c("y1", "y2")), как предложено в некоторых других сообщениях. Но проблема в том, что вся эстетика уже используется вручную, и попытка установить другую дискретную версию переопределит свойства, которые уже установлены для графика (и испортить всю вещь). Поэтому в идеале - я хотел бы увидеть точно такой же график, но в легенде отображались только y1 и y2.

ответ

1

Вы можете попробовать подмножество данных, заданных по имени переменной и нанесение их по отдельности.

p <- ggplot(df, aes(x = time, y = value, color = variable, 
        group = variable, size = variable, linetype = variable)) + 
    geom_line(data=df[which(substr(df$variable,1,1)=='y'),])+ 
    scale_linetype_manual(values = c(2, 2)) + scale_size_manual(values = c(2, 2)) + 
    scale_color_manual(values = c("red", "green")) + 
    theme_minimal() + 
    geom_line(data=df[which(substr(df$variable,1,1)=='x'),], 
      aes(x = time, y = value, group = variable), 
      color="grey",size=0.3,linetype=1) 
# Plot elements that have attributes set outside of aes() will 
# not appear on legend! 

enter image description here

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