#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))
в конце вашего кода сюжета.