2017-02-20 4 views
-1

Я пытался построить две линейные графики, одну пунктирную и другую сплошную. Мне удалось сделать это в области сюжета, но легенда проблематична.ggplot2 change line type

Я смотрел такие сообщения, как Changing the line type in the ggplot legend, но я не могу исправить это решение. Где я ошибся?

library(ggplot2) 
year <- 2005:2015 
variablea <- 1000:1010 
variableb <- 1010:1020 
df = data.frame(year, variablea, variableb) 

p <- ggplot(df, aes(x = df$year)) + 
    geom_line(aes(y = df$variablea, colour="variablea", linetype="longdash")) + 
    geom_line(aes(y = df$variableb, colour="variableb")) + 
    xlab("Year") + 
    ylab("Value") + 
    scale_colour_manual("", breaks=c("variablea", "variableb") 
         , values=c("variablea"="red", "variableb"="blue")) + 
    scale_linetype_manual("", breaks=c("variablea", "variableb") 
         , values=c("longdash", "solid")) 

p 

enter image description here

Обратите внимание, что обе линии появляются в виде твердого вещества в легенде.

+0

Измените данные с помощью 'tidyr :: gather', чтобы поместить данные в один столбец, тогда он просто будет работать –

ответ

2

ggplot любит длинные данные, поэтому вы можете сопоставить тип линии и цвет переменной. Например,

library(tidyverse) 

df %>% gather(variable, value, -year) %>% 
    ggplot(aes(x = year, y = value, colour = variable, linetype = variable)) + 
    geom_line() 

Регулировка цвета и типов линий весов с соответствующими scale_*_* функций, если вам нравится.

+0

Отлично. Как я могу гарантировать, что будут отображаться только целые годы? – wwl

+1

Используйте 'scale_x_continuous (breaks = seq (2005, 2015, 5))', передавая любую последовательность прерываний, которые вы хотите. – alistaire