嗨,我有下面的情节,有2个传说出现。我有一个问题:
目前我添加的图例有6个条目“A值”,“广告价值”,“au值”,“b”,“bD值”和“bU值”。我真的希望传奇只显示4个条目
有什么想法吗?
d = data.frame (title = c( rep(c("aU","A","ad"),2), rep( c("bU","b","bD"),2 ) ) ,
time = c(1,1,1,2,2,2,1,1,1,2,2,2) ,
value = c(10,8,4,9,7,3,5,3,1,4,2,0))
d
ggplot(data=d , aes(x=time, y=value,
group=title,
colour = title,
linetype =title))+
geom_line() + geom_point() +
scale_colour_manual( name = "Metric",
values = c(
A = "red",
ad = "red",
aU = "red",
b = "blue",
bU ="blue",
bD= "blue"),
labels = c(
A = "A value",
ad = "Ad value",
aU = "au value",
b = "b",
bU ="bU vlaue",
bD= "dD Value")
)+
scale_linetype_manual(name = "Metric",
values =c(
A = "solid",
ad = "dashed",
aU = "dashed",
b = "solid",
bU ="dashed",
bD= "dashed"),
labels = c(
A = "A value",
ad = "Ad value",
aU = "au value",
b = "b",
bU ="bU vlaue",
bD= "dD Value")
)
答案 0 :(得分:2)
第二个图例正在显示,因为您只在两个指南之一中更改了标签和标题。如果您更改另一个以匹配它(或者更好,更改title
列以匹配您想要的标签),颜色和线型将一起显示在一个图例中。
或者,如果分组匹配(即,如果“U”在“A”和“B”中表示相同的内容),您可以在其中一个上设置颜色,在另一个上设置线型(出现成为你现在正在做的事情)。像这样:
d2 <-
tidyr::separate(d
, title
, c("group","subgroup")
, 1
, FALSE)
ggplot(data=d2
, aes(x=time, y=value,
group=title,
colour = group,
linetype =subgroup))+
geom_line() + geom_point()
如果您还想要,可以手动设置颜色和线型。
或者,对于您目前的方法:
ggplot(data=d , aes(x=time, y=value,
group=title,
colour = title,
linetype =title))+
geom_line() + geom_point() +
scale_colour_manual(
values = c(
A = "red",
ad = "red",
aU = "red",
b = "blue",
bU ="blue",
bD= "blue")
)+
scale_linetype_manual(values =c(
A = "solid",
ad = "dashed",
aU = "dashed",
b = "solid",
bU ="dashed",
bD= "dashed")
)
要设置两种线型,您可以使用:
d2$forLabel <- ifelse(d2$subgroup == "", "Value", "Limit")
ggplot(data=d2
, aes(x=time, y=value,
group=title,
colour = group,
linetype =forLabel))+
geom_line() + geom_point() +
scale_linetype_manual(values = c(Limit = "dashed"
, Value = "solid"))
我建议不要为所有内容添加单独的标签(特别是在以后添加更多群组的情况下)
作为另一种选择,如果您要显示间隔,是否会考虑使用功能区而不是两条线?
d3 <-
d2 %>%
group_by(group,time) %>%
summarise(min = min(value), max=max(value)
, value = value[forLabel=="Value"])
d3 <-
d2 %>%
group_by(group,time) %>%
summarise(min = min(value), max=max(value)
, value = value[forLabel=="Value"])
ggplot(data=d3
, aes(x=time, y=value,
color = group))+
geom_line() + geom_point() +
geom_ribbon(aes(ymin = min, ymax = max
, fill = group
, color = NULL)
, alpha = 0.2
, color = NA) +
theme_minimal()
答案 1 :(得分:0)
d1 <- data.frame(title = c("aU","A","ad","bU","b","bD"),
title2 = c("aU & ad", "A", "aU & ad",
"bU & bD", "b", "bU & bD"))
d2 <- merge(d, d1, by = "title")
ggplot(d2 , aes(x = time, y = value, group = title,
colour = title2, linetype = title2)) +
geom_line() + geom_point() +
scale_colour_manual(name = "Metric",
values = c("A" = "red", "aU & ad" = "red",
"bU & bD" = "blue", "b" = "blue")) +
scale_linetype_manual(name = "Metric",
values = c("A" = "solid", "aU & ad" = "dashed",
"bU & bD" = "dashed", "b" = "solid"))
您可以使用ifelse
创建title2
,我使用merge
,因为我觉得它更清洁