如何在ggplo2中为包装的图例添加两个标题?

时间:2015-07-23 21:50:03

标签: r charts ggplot2

我想在ggplot2图表的包装图例中每行添加一个标题。

这样的事情:

enter image description here

我用来生成传奇的代码:

library(ggplot2)
df <- data.frame(X=letters[1:6], Y=rnorm(6, mean=10, sd=1))
p <- ggplot(df, aes(x=X, y=Y, fill=X)) +
     geom_bar(stat="identity") +
     scale_fill_manual(
        values=c('#a6cee3','#1f78b4','#b2df8a','#33a02c','#A94774','#941751','#FFD479','#BEAD01'),
        name="",
        labels=c("1", "2", "3", "4", '5', '6', '7', '8'),
        guide=guide_legend(nrow=2, byrow=T, title='')
     ) +
     theme(legend.position='bottom')
p

谢谢!

1 个答案:

答案 0 :(得分:2)

添加theme(legend.position='bottom')将图例移到底部。

使用guide_legend(nrow=2, byrow=T, title='Row 1\nRow 2'使图例换行到2行,并在顶部添加“第1行”,然后在下面添加“第2行”。但是线条相当接近,所以如果你将legend.title=element_text(lineheight=unit(1.5, 'lines'))添加到theme会更好地隔离它们(抱歉,我不知道1.5是否是一个可以一直有效的值,或者你是否有手动选择它,这就是我所做的。)

这是一个(微不足道的)可重现的例子(顺便说一下喜欢这些颜色 - 必须将它们留作将来使用!):

library(ggplot2)
library(grid) # for `unit`
df <- data.frame(X=letters[1:6], Y=rnorm(6, mean=10, sd=1))
p <- ggplot(df, aes(x=X, y=Y, fill=X)) + geom_bar(stat="identity") +
       scale_fill_manual(
         values=c('#a6cee3','#1f78b4','#b2df8a','#33a02c','#A94774','#941751','#FFD479','#BEAD01'),
         name="",
         labels=c("1", "2", "3", "4", '5', '6', '7', '8'),
         guide=guide_legend(nrow=2, byrow=T, title='Row 1\nRow 2')
       ) +
       theme(
         legend.position='bottom',
         legend.title=element_text(lineheight=unit(1.5, 'lines'))
       )
p

enter image description here