底部的图例,在 r 中用 ggplot2 包裹的两行

Posted

技术标签:

【中文标题】底部的图例,在 r 中用 ggplot2 包裹的两行【英文标题】:Legend on bottom, two rows wrapped in ggplot2 in r 【发布时间】:2015-01-23 16:28:39 【问题描述】:
library(ggplot2)
library(scales)
library(reshape2)  

Rdates <- c("2007-01-31","2007-02-28","2007-03-30","2007-04-30","2007-05-31","2007-06-29","2007-07-31","2007-08-31","2007-09-28","2007-10-31")
Rdates <- as.Date(Rdates)
Cnames <- c("Column 1 Really Long","Column 2 Really Long","Column 3 Really Long","Column 4 Really Long","Column 5 Really Long","Column 6 Really Long","Column 7 Really Long","Column 8 Really Long","Column 9 Really Long","Column 10 Really Long")
MAINDF <- data.frame(replicate(10,runif(10,-0.03,0.03)))
rownames(MAINDF) <- Rdates
colnames(MAINDF) <- Cnames
CUSTOMpalette <- c("#1a2ffa", "#0d177d", "#1a9ffa", "#fa751a", "#4b8e12", "#6fd21b", "#fae51a", "#c3b104", "#f5df05", "#dcc805")
MAINDF[,"dates"] <- Rdates

MAINDF <- melt(MAINDF,id.vars="dates")

gg <- ggplot(MAINDF, aes(x = dates, y = value, fill = variable))
gg <- gg + geom_bar(stat = "identity")
gg <- gg + scale_x_date(breaks = "3 months", labels=date_format("%b%y"),limits=c(min(as.Date(MAINDF$dates)),max(as.Date(MAINDF$dates))))
gg <- gg + theme(
  axis.text.x= element_text(color="black",angle=45, size=10, vjust=0.5),
  axis.text.y= element_text(color="black", size=12, vjust=0.5),
  axis.title.y = element_text(color="black",size=12, vjust=0.5),
  plot.title = element_text(color="black",face="bold",size=14, hjust=0.5,vjust=1),
  panel.background = element_blank(),
  panel.border = element_rect(linetype = "solid", colour = "black",fill=NA),
  legend.position="bottom",
  legend.title = element_blank(),
  legend.key = element_rect(fill="white"), legend.background = element_rect(fill=NA)
)
gg <- gg + xlab("") + ylab("Monthly Returns") 
gg <- gg + ggtitle("Contribution by Strategy")
gg <- gg + scale_y_continuous(labels = percent_format())
gg <- gg + scale_fill_manual(values=CUSTOMpalette)
gg

目前有一个 ggplot2 堆叠条形图设置。现在一切正常,除了我对传说有疑问。我把它放在底部,但有 10 件物品,所以有些被截断(不适合)。我试过guides(fill=guide_legend(nrow=2)),但这会使标签的顺序不同(我想先得到前5个,然后是下面的最后5个。有什么建议吗?

【问题讨论】:

能否让您的示例可重现,好吗? 请阅读有关如何生成minimal reproducible example 的信息。这将使其他人更容易帮助您。 会做的,我想这可能只是一个简单的问题,我错过了一些东西。不适用于可重现的示例。 编辑了原始代码,希望对您有所帮助。我的问题是传说被切断了。将其强制为 2 行会扭曲列显示顺序(只希望最后 5 行环绕在前 5 行之下)。 【参考方案1】:

你真的很亲密。最后试试这个:

gg+guides(fill=guide_legend(nrow=2,byrow=TRUE))

【讨论】:

啊哇不能相信我没有找到那个。谢谢你的回答,我的头撞在桌子上。 byrow=TRUE 应该是默认行为【参考方案2】:

上述解决方案是针对单一美学提出的。在某些情况下,您可能希望将图例包装成行而不是列跨越不同的美学。为了后代,如下所示。

library(ggplot2)

ggplot(diamonds, aes(x=carat, y=price, col=clarity, shape=cut)) +
  geom_point() +
  theme(legend.position="bottom")

传说在下面被截断:

要使用行包装图例,我们指定legend.box="vertical"。下面,我们还减少了紧凑性的余量。

ggplot(diamonds, aes(x=carat, y=price, col=clarity, shape=cut)) +
  geom_point() +
  theme(legend.position="bottom", legend.box="vertical", legend.margin=margin())

【讨论】:

您好,我们有什么办法可以让清晰度的传说高于切割的传说?谢谢! @MiaoCai 是的,看看 guide_legend 的 order 参数,例如***.com/a/11397958/3275826

以上是关于底部的图例,在 r 中用 ggplot2 包裹的两行的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化图例放置在图像底部(bottom)并分两行显示实战

R语言ggplot2可视化:ggplot2可视化分组箱图,将可视化图像的图例(legend)放置在图像底部居中其中图例信息水平平铺​ (position legend bottom center)

R语言ggplot2可视化:ggplot2可视化分组箱图,将可视化图像的图例(legend)放置在图像底部左边左对齐其中图例信息水平平铺​ (position legend bottom left)

R语言ggplot2可视化:ggplot2可视化分组箱图,将可视化图像的图例(legend)放置在图像底部左边左对齐其中图例信息水平平铺​ (position legend bottom left)

R语言ggplot2可视化:在ggplot2中将图例(legend)移到图内自定义图例所处的位置自定义图例背景图例所处边框的颜色

R:在 ggplot2 中设置图例和颜色