如何在ggplot2中将多个标签格式化为单个图例

时间:2014-10-13 15:36:49

标签: r ggplot2 legend

我似乎找不到解决这个具体问题的方法,所以我希望有人可以提供帮助(而且我没有错过任何内容)。

我有ggplot2的长格式数据,我想将两个属性放入图例中的标签中。样本数据集:

require(ggplot2)
ds1=data.frame("Heading"="Alpha","Val"=0.534,"x"=seq(1,5,1),"y"=(seq(10,2,-2)**1.5))
ds2=data.frame("Heading"="Beta","Val"=0.732,"x"=seq(1,5,1),"y"=seq(30,6,-6))
ds3=data.frame("Heading"="Carotene","Val"=0.877,"x"=seq(1,5,1),"y"=seq(3,15,3))
test1=rbind(ds1,ds2,ds3)
test1$Head1=factor(test1$Heading)
test1$Val=factor(test1$Val)
p5=ggplot(test1,mapping=aes(x=x,y=y,colour=Heading)) + geom_line(size=1)
print(p5)

然而,第二段数据Val,我也想进入传奇。我发现here使用了互动

的建议
p5 = ggplot(test1,mapping=aes(x=x,y=y,colour=interaction(Heading,Val,sep=" "))) + geom_line(size=1) + labs(colour="Heading")

它包含我想要的所有信息,但是一起运行。或者,我试过

p5=ggplot(test1,mapping=aes(x=x,y=y,colour=Heading)) + geom_line(size=1)
p5 + scale_colour_discrete(labels=paste(levels(test1$Heading)," (",levels(test1$Val),")",sep=""))
然而,对于我真正瞄准的内容,我想要格式化“Val”信息,以便插入适当数量的空格以将它们分成列。像data.frame一样,但也有图的图例/颜色信息。或者只是以某种方式正确地证明那一半(Val)离开每一行的前半部分(标题)左对齐。尝试,

p5 = ggplot(test1,mapping=aes(x=x,y=y,colour=interaction(Heading,Val,sep="\t"))) + geom_line(size=1) + labs(colour="Heading")

强制制表符(希望它可能以某种与机器相关的方式工作),似乎也不起作用,尽管使用“\ n”(为了空间和清晰度,我想将标签保留在一个上)因为我正在绘制的数据中有12个级别,我希望观察者能够轻松地扫描数值范围)。谢谢你的任何建议......

1 个答案:

答案 0 :(得分:0)

如果你对扭转价值感到满意的话。标签,这将为您提供所需的列:

test1$grouping <- sprintf("%s - %s", test1$Val, test1$Heading)
ggplot(test1,mapping=aes(x=x,y=y,colour=grouping)) + geom_line(size=1) + labs(colour="Heading")

enter image description here