2017-02-20 40 views
-1

我一直在试图绘制两条线条图,一条虚线,另一条固体。我在剧情区成功地做到了这一点,但传说有问题。ggplot2更改线条类型

我看了帖子,如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