ggplot2 - 文本和点宝石的大小审美

时间:2016-03-03 02:46:56

标签: r ggplot2

我正在使用ggplot2制作散点图,我希望将大小美学映射到geom_point()geom_text() geoms,但使用不同的连续变量来指示尺寸。

这个问题couple similar,但它们都不是我所要求的。我想在两个不同的geom上使用相同的美学,而不是在同一个geom上使用相同的美学。我想有一个标记的散点图,其中点的大小和文本的大小映射到不同的连续变量。我不需要文本映射来创建图例。以下是我的尝试。

library(ggplot2)

ggplot(data = mtcars) +
  geom_point(aes(x = hp, y = mpg, size = qsec)) +
  geom_text(aes(x = hp, y = mpg, 
                label = row.names(mtcars), size = wt))

enter image description here

正如你所看到的,第二种美学是唯一一种使它成为图形的美学,但似乎两种图例都是相互叠加的。这是可以做到的吗?

1 个答案:

答案 0 :(得分:3)

geom_point qsec size映射到geom_text;在wt中,您希望size映射到ggplot2gtable不允许两种不同大小的映射。但是通过一点gtable魔法,你可以得到你想要的结果。创建两个图:一个带点;第二个是文字。但是对于文本图,请确保背景是透明的,并且网格线是空白的。

然后使用library(ggplot2) library(gtable) library(grid) p1 = ggplot(data = mtcars) + geom_point(aes(x = hp, y = mpg, size = qsec)) p2 = ggplot(data = mtcars) + geom_text(aes(x = hp, y = mpg, label = row.names(mtcars), size = wt)) p2 = p2 + theme(panel.background = element_rect(fill = "transparent", colour = NA), panel.grid = element_blank()) gA = ggplotGrob(p1) gB = ggplotGrob(p2) gB = gtable_filter(gB, "panel") # grab the plot panel from gb # Get the positions of the panel in gA in the layout: t = top, l = left, ... pos <-c(subset(gA$layout, grepl("panel", gA$layout$name), select = t:r)) gC = gtable_add_grob(gA, gB, t = pos$t, l = pos$l) # overlay gB's panel into panel slot in gA grid.newpage() grid.draw(gC) ,从第二个文本图中抓取绘图面板,并插入第一个绘图中的绘图面板插槽。

{{1}}

enter image description here