R 如何将颜色和线型映射到ggplot2线型图中的多个列

R 如何将颜色和线型映射到ggplot2线型图中的多个列,r,ggplot2,legend,linegraph,R,Ggplot2,Legend,Linegraph,我有一个data.frame,有四个队列C1-C4,测量了五次M1-M5 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"

我有一个
data.frame
,有四个队列C1-C4,测量了五次M1-M5

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"))
我设法做到了这一点,通过手动分组行。然而,我对这个传说有点困惑。我想我需要将颜色和线型映射到一些分组标准。但是我该怎么做呢?我应该按队列分组,但它们不在一列之内。 有没有一种方法可以使用此手动分组或其他方法来构建图例来构建我的绘图?
任何帮助都将不胜感激。

以下是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)

mydf谢谢大家,这帮了大忙。我在控制线型和颜色方面有些困难,因为我需要黑色虚线来覆盖绿色实线。但最终结果是:

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"))
库(ggplot2)
图书馆(E2)

mydf可能重复您需要将数据“融化”为长格式。请参阅@rcs在@Henrik链接中提供的答案,了解如何执行此操作以及如何为每个组生成具有不同颜色的绘图。一旦您的数据被融化,您只需要一次呼叫
geom\u line
。谢谢!
melt
的附加选项也非常有用。然而,对我来说,“C4”的黑线在你的版本中是固定的。如果我正确理解你的代码,它就不应该。知道为什么吗?不,事实上我不知道为什么。但你的解决方案是有效的。
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"))