укажите порядок рисования с помощью geom_line

#ggplot2

#ggplot2

Вопрос:

Я стараюсь избегать перекрывающихся линий в цветовой гамме. Извините за уродливый сюжет, но в следующем, как мне нарисовать линии в порядке y1, y2, y1Smooth и y2Smooth?

 foo lt;- tibble(x=1:100,y1=rnorm(100,1),y2=rnorm(100,2)) %gt;%  mutate(y1Spline = smooth.spline(y1,spar=0.5)$y,  y2Spline = smooth.spline(y2,spar=0.5)$y) %gt;%  pivot_longer(cols=-x)  cols = c("darkgreen","darkblue") ggplot(foo,aes(x=x,y=value,col=name, alpha=name))    geom_line()    scale_color_manual(values=rep(cols,each=2))    scale_alpha_manual(values=c(0.5,1,0.5,1))  

Ответ №1:

Практически говоря, порядок элементов легенды для символьной переменной будет равен порядку уровней, когда этот столбец преобразуется в коэффициент. Итак, порядок по умолчанию иллюстрируется следующим:

 gt; levels(factor(foo$name)) [1] "y1" "y1Spline" "y2" "y2Spline"  

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

 library(ggplot2)  set.seed(8675309) foo lt;- tibble(x=1:100,y1=rnorm(100,1),y2=rnorm(100,2)) %gt;%  mutate(y1Spline = smooth.spline(y1,spar=0.5)$y,  y2Spline = smooth.spline(y2,spar=0.5)$y) %gt;%  pivot_longer(cols=-x)  # force factor level order foo$name lt;- factor(foo$name, levels=c("y1", "y2", "y1Spline", "y2Spline"))  cols = c("darkgreen","darkblue") ggplot(foo,aes(x=x,y=value,col=name, alpha=name))    geom_line()    scale_color_manual(values=rep(cols,each=2))    scale_alpha_manual(values=c(0.5,1,0.5,1))  

введите описание изображения здесь

Особое примечание, линии нарисованы в таком порядке — это означает, что строка «y1» будет поверх «y1Spline». Если вы хотите, чтобы линии были нарисованы в таком порядке, но легенда была перевернута, вам нужно будет добавить что-то вроде guides(color=guide_legend(reverse=TRUE)) в конце вашего кода сюжета.