2014-11-21 54 views
1

我有一个data.frame,其中四个队列C1-C4已经测量了五次M1-M5。如何将颜色和线型映射到ggplot2线图中的若干列

library(ggplot2) 
mydf <- data.frame(C1=c(49, 14, 8, 7, 2), 
        C2=c(0, 0, 0, 0, 0), 
        C3=c(13, 17, 7, 8, 8), 
        C4=c(0, 0, 0, 0, 0), 
        M = c("M1", "M2", "M3", "M4", "M5")) 

我想为每个队列绘制一条线来显示测量结果。

ggplot(data=mydf) + 
    geom_line(aes(x=M, y=C1, group=1), colour="red") + 
    geom_line(aes(x=M, y=C2, group=2), colour="green") + 
    geom_line(aes(x=M, y=C3, group=3), colour="blue") + 
    geom_line(aes(x=M, y=C4, group=4), colour="black", linetype="dashed") 

我设法这样做了,通过手动分组行。不过,我对这个传说有麻烦。我想我需要将颜色和线条样式映射到一些分组标准。但我该怎么做?我应该按队列分组,但他们不在一列内。 有没有办法使用这种手动分组或其他方式来构建我的情节的图例? 任何帮助将不胜感激。

+2

可能重复[在同一个图上使用ggplot2绘制两个变量作为行](http://stackoverflow.com/questions/3777174/plotting-two-variables-as-lines-using-ggplot2-on-the-相同图) – Henrik 2014-11-21 19:47:43

+0

您需要将数据“融化”为长格式。在@Henrik链接中查看@ rcs的答案,提供了如何执行此操作以及如何为每个组生成不同颜色的图。一旦你的数据被融化,你只需要一次调用'geom_line'。 – eipi10 2014-11-21 19:55:45

回答

0

谢谢大家,这极大地帮助。因为我需要黑色虚线覆盖绿色实线,所以我在控制线条和颜色方面努力了一些。但最终结果如下:

library(ggplot2) 
library(reshape2) 

mydf <- data.frame(M = c("M1", "M2", "M3", "M4", "M5"), 
        C1=c(49, 14, 8, 7, 2), 
        C2=c(0, 0, 0, 0, 0), 
        C3=c(13, 17, 7, 8, 8), 
        C4=c(0, 0, 0, 0, 0)) 
mydf2 <- melt(mydf) 
ggplot(data=mydf2) + 
    geom_line(aes(x=M, y=value, group=variable, colour=variable, linetype=variable)) + 
    scale_linetype_manual(values=c("solid", "solid", "solid", "dashed")) + 
    scale_colour_manual(values=c("red", "green", "blue", "black")) 

再次感谢您的帮助!

1

这里是eipi10建议什么的例子:

mydf <- data.frame(C1=c(49, 14, 8, 7, 2), 
        C2=c(0, 0, 0, 0, 0), 
        C3=c(13, 17, 7, 8, 8), 
        C4=c(0, 0, 0, 0, 0), 
        M = c("M1", "M2", "M3", "M4", "M5")) 

mydf.m <- melt(mydf, id.vars="M", 
       variable.name="my_var_name", 
       value.name="my_value_name") 

mydf.m$linetype_var <- ifelse(mydf.m["my_var_name"]=="C4","dashed","solid") 

my_colors <- c("red","green","blue","black") 

ggplot(mydf.m, aes(x=M, y=my_value_name, 
        group=my_var_name, 
        color=my_var_name, 
        linetype=linetype_var))+ 
    geom_line()+ 
    scale_linetype_identity()+ 
    scale_color_manual(values=my_colors) 
+0

谢谢! “熔化”的附加选项也很有帮助。然而,对于我来说,“C4”的黑色线条在你的版本中是固定的。如果我理解你的代码,它不应该。任何想法为什么? – sthesing 2014-11-21 22:52:12

+0

其实我不知道为什么。但是你的解决方案的工作 – Matt74 2014-11-21 22:58:26