簡體   English   中英

控制具有顏色和線型美學屬性的繪圖的圖例標簽

[英]Controlling legend labels for a plot with color and linetype aesthetic attributes

我想繪制四行,其中圖例標簽顏色由列中的唯一值(“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

主“組”列是將顏色和線型列粘貼在一起的結果,它表示每行的ID。 為了獲得一個圖例,我最初將顏色和線型屬性映射到此“組”列。 以下是我想要的情節。

期望的情節 在此輸入圖像描述

嘗試

為簡單起見,我正在重新創建數據框以包含具有文字顏色和線型值的列。

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)

在此輸入圖像描述

您可以通過在將values更改為所需values后抑制線型圖例,然后使用override.aes “手動”設置colour圖例中的線型來解決此問題。

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))))

在此輸入圖像描述

這給你幾乎你想要的東西

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

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM