在Creating a ggplot legend with both color and shape中,有方法如何组合形状和颜色,但基于一个变量。我想知道如果将变量分成两个变量,这是否可行。
Hier是一个测试数据:
(x <- data.frame(time =rep(1:5,4)
, sex = rep(c("m","f"), each=5)
, val_type = rep(c("obs","fit"),each=10)
, val = rep(1:4,each=5)*rep(1:5,4)
)
)
为了展示我想要的传奇,我将两个变量结合起来:
x$sv <- paste(x$sex,x$val_type,sep='-')
这是带有一个变量的ggplot:
ggplot(data=x, aes(x=time, y=val, linetype=sv, col=sv)) +
geom_line() +
scale_colour_manual(name = ""
, values=c("red","red","blue","blue")
, labels=c("Female fitted","Female observed"
,"Male fitted","Male observed")
) +
scale_linetype_manual(name = ""
, values=c(1,2,1,2)
, labels=c("Female fitted","Female observed"
,"Male fitted","Male observed")
)
这是情节:
我想拥有相同的传奇但分别使用两个变量
ggplot(data=x, aes(x=time, y=val, linetype=val_type, col=sex)) +
geom_line()
有可能吗?我不想使用组合变量的原因是我不想创建我不需要进行分析的变量。另一个原因是看看如何手动定制图例。 感谢帮助。
答案 0 :(得分:2)
我没有看到创建一个新变量是一个主要问题(特别是如果你要使用管道)。但是,是的,可以使用interaction
函数并使用手动缩放定义。
ggplot(data = x,
aes(x = time,
y = val,
linetype = interaction(val_type, sex),
col = interaction(val_type, sex))) +
geom_line() +
scale_colour_manual(name = ""
, values=c("red","red","blue","blue")
, labels=c("Female fitted","Female observed"
,"Male fitted","Male observed")
) +
scale_linetype_manual(name = ""
, values=c(1,2,1,2)
, labels=c("Female fitted","Female observed"
,"Male fitted","Male observed")
)