使用颜色和线型美学属性控制图表的图例标签

4
我希望能绘制四条线,图例标签为“AND”,颜色由“Color_Group”列中的唯一值决定,线型由“Line_Type_Group”决定。这是用于创建数据框架和数据框架本身所需的代码。
data <- data.frame("x"=c(1,2,1,2,1,2,1,2),
                "y"=1:8,
                "Color_Group"=c("A","A","A","A","B","B","C","C"),
                "Line_Type_Group"=c(1,1,2,2,2,2,1,1),
                "Group"=c("A1","A1","A2","A2","B2","B2","C1","C1"),
                stringsAsFactors=F)

> data
  x y Color_Group Line_Type_Group  Group
  1 1           A               1     A1
  2 2           A               1     A1
  1 3           A               2     A2
  2 4           A               2     A2
  1 5           B               2     B2
  2 6           B               2     B2
  1 7           C               1     C1
  2 8           C               1     C1

主要的“Group”列是将颜色和线型列粘贴在一起的结果,它代表每条线的ID。为了获得一个图例,我最初将颜色和线型属性映射到这个“Group”列。下面是我希望绘制的图形。
所需图形: enter image description here 尝试: 为了简单起见,我重新创建了数据框以包括具有字面颜色和线型值的列。
data <- data.frame("x"=c(1,2,1,2,1,2,1,2),
                "y"=1:8,"Color_Group"=c("A","A","A","A","B","B","C","C"),
                "Color"=c(rep("red",4),"blue","blue","green","green"),
                "Line_Type_Group"=c(1,1,2,2,2,2,1,1),
                "Line_Type"=c("solid","solid","dashed","dashed","dashed","dashed","solid","solid"),
                "Group"=c("A1","A1","A2","A2","B2","B2","C1","C1"),
                stringsAsFactors = F)

> data
  x y Color_Group Color Line_Type_Group Line_Type Group
  1 1           A   red               1     solid    A1
  2 2           A   red               1     solid    A1
  1 3           A   red               2    dashed    A2
  2 4           A   red               2    dashed    A2
  1 5           B  blue               2    dashed    B2
  2 6           B  blue               2    dashed    B2
  1 7           C green               1     solid    C1
  2 8           C green               1     solid    C1  


line_type_group <- data$Line_Type
color_group <- data$Color
names(line_type_group) <- data$Group
names(color_group) <- data$Group
labels <- data$Color_Group
names(labels) <- data$Group
#Both attempts at setting labels variable yields plot below
#labels <- c("A","A","B","C")

g <- ggplot(data,aes(x=x,y=y,colour=Group,linetype=Group))+geom_line()
g + scale_colour_manual(name="Legend",values=color_group,labels=labels) +
    scale_linetype_manual(name="Legend",values =line_type_group,labels=labels)

enter image description here

2个回答

4

在将values更改为所需内容后,您可以通过抑制线型图例,然后使用override.aescolour图例中“手动”设置线型来解决此问题。

ggplot(data,aes(x=x, y=y, colour=Group, linetype=Group))+
    geom_line() + 
    scale_colour_manual(values = color_group, labels = labels) +
    scale_linetype_manual(values = line_type_group, guide = "none") +
    guides(colour = guide_legend(override.aes = list(linetype = c(1, 2, 2, 1))))

enter image description here


0

这几乎可以给你想要的东西

g <- ggplot(data,aes(x=x,y=y,colour=Group,linetype=Group))+geom_line()
g + scale_colour_manual(name="Legend",values=c("red", "red", "blue", "green"), labels = c("A1", "A2", "B", "C")) +scale_linetype_manual(name="Legend",values=c("solid", "dashed", "dashed", "solid"), labels = c("A1", "A2", "B", "C"))
#
g

enter image description here


是的,我能够通过在比例尺函数中省略标签参数来创建类似的图。棘手的部分是让ggplot在定义线型时将A1和A2识别为两个组,而在定义颜色和标签名称时将其视为一个组。 - Adam Birenbaum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接