[英]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.