0

如何为以下情节和边缘创建图例?我搜索了低谷?theme,但我不知道。

library(ggplot2)
data <- data.frame(col1 = c(1, 2, 2, 3, 3, 4), col2 = c(1, 2, 2, 1, 2, 1), z = rnorm(6))

p1 <- ggplot(data, aes(col1, y = ..count..,fill=col2))
p1 <- p1 + geom_bar()

p2 <- ggplot(data, aes(x = z))
p2<-p2 + geom_density()
p2

gt1 <- ggplot_gtable(ggplot_build(p1))
gt2 <- ggplot_gtable(ggplot_build(p2))

获取 x 轴和 y 轴标题和文本的最大宽度和高度

maxWidth = unit.pmax(gt1$widths[2:3], gt2$widths[2:3])

在 gt1、gt2 和 gt3 的 gtable 中设置最大值

gt1$widths[2:3] <- as.list(maxWidth)
gt2$widths[2:3] <- as.list(maxWidth)

将散点图与两个边缘箱线图结合创建一个新的 gtable

gt <- gtable(widths = unit(c(7, 2), "null"), height = unit(c(2, 7), "null"))

将 gt1、gt2 和 gt3 插入新的 gtable

gt <- gtable_add_grob(gt, gt1, 2, 1)
gt <- gtable_add_grob(gt, gt2, 1, 1)

并渲染情节

grid.newpage()
grid.draw(gt)
4

1 回答 1

0

只是为了说清楚。带有循环的初始代码产生的结果略有不同,而不是填充选项

1)如果要添加图例,则应为映射添加颜色:

ggplot(data,aes(col1,group=col2,fill="id"))+
geom_bar(position="identity",alpha=0.5)+
scale_fill_manual(name="id",values="blue")

在此处输入图像描述

如果您有更大的数据,则不能将每个叠加的颜色添加到图例中,因为会有很多选项。每个条的黑暗显示每个 col1 与 col2 id 的强度,但不显示与哪个

2)“填充”选项有点不同

ggplot(data,aes(col1,fill=as.factor(col2)))+geom_bar(position="dodge")

在此处输入图像描述

它只显示每个 col1 的 col2 id。这个想法略有不同。

3)您可以通过添加手动更改图例:

guides(fill=guide_legend(title="Col2",
                       direction = "vertical",title.position="top",
                       title.vjust = 0.5)) # just example

和使用 scale_fill_discrete() 选项的图例键

4)不确定密度图需要什么样的图例,但我们假设如下:

ggplot(data, aes(x = z,colour="id"))+ 
geom_density()+
scale_colour_manual(name="id",values="blue")

在此处输入图像描述

然后你只需将地块添加在一起。顺便说一句,查看教程以将多个图添加在一起,希望你觉得它有用:)

PS 你可以混合使用 fill=col2, position="identity" 和 alpha=0.5,这只是一个很难解释的可怕情节,而且没有规模啤酒可以提供帮助:)

在此处输入图像描述

UPD:在您的代码中使用 gtable。让示例 1 为 p1 绘图,示例 4 为 p2。简单地复制粘贴代码后,您将获得以下信息: 在此处输入图像描述

如果您查看我提到的教程,您可以获得以下内容: 在此处输入图像描述

再次,请澄清你真正想对传说做什么。当您获得情节的大小时,情节也包括图例。

如果您至少可以简单地尝试一下我展示的示例,您会看到 ggtables 中的差异。图例是guide-box(正如您可以通过用于编辑图例的选项猜测的那样)。所以,你问如何创造传奇 - ta-da。ggtable中的传说在哪里?达达 如果您还有其他问题,恐怕它们超出了 SO 的能力范围

于 2013-09-13T10:32:58.867 回答