将单位标签添加到ggplot2中的颜色渐变图例

时间:2016-12-08 23:15:49

标签: r plot ggplot2

让我们说我在图中绘制了一些变量,并将图中点的颜色与其他变量相关联。这在ggplot2中很容易做到并生成下图:

require(ggplot2)
miss <- sample(c(NA, 1:5), nrow(mtcars), rep = TRUE)
qplot(mpg, wt, data = mtcars, colour = miss) +
  scale_colour_gradient(na.value = "black")

enter image description here

然而,我希望'miss'传奇有单位。具体来说,我希望这些单位为瓦特米^ -2小时^ -1(具有适当格式的上标)。添加此内容的最直接方法是什么?

2 个答案:

答案 0 :(得分:2)

创建一个包含所需标签文本的向量,包括任何特殊的plotmath表达式,然后使用parse将其计算为将在绘图中正确呈现的表达式。然后,在绘图代码中,使用breaks参数设置所需的中断,并在labels参数中使用相应的标签。

labs = parse(text=paste0(1:5, "~watts%.%meter^-2"))

qplot(mpg, wt, data = mtcars, colour = miss) +
  scale_colour_gradient(na.value = "black", breaks=1:5, labels=labs)

enter image description here

更新:您可以将单位放在图例旁边,但您可能需要手动调整才能获得正确的位置(尽管有人比我更了解ggplot的grob结构可以自动化它)。此外,即使我已关闭剪辑,如果它太靠近图例,图例grob仍会覆盖单位注释。我不知道如何解决这个问题。

p1 = qplot(mpg, wt, data = mtcars, colour = miss) +
  scale_colour_gradient(na.value = "black") + 
  annotate(x=max(mtcars$mpg) + 0.25*diff(range(mtcars$mpg)), 
           y=mean(range(mtcars$wt)) - 0.1,
           label=lbl, geom="text", parse=TRUE, angle=-90, size=3.3) +
  coord_cartesian(xlim=range(mtcars$mpg)) +
  theme(plot.margin=unit(c(0.5,2,0.5,0.5), "lines"))

# Turn off clipping
gt <- ggplot_gtable(ggplot_build(p1))
gt$layout$clip <- "off"
grid.draw(gt)

enter image description here

答案 1 :(得分:1)

如果您只想在传奇中找到它,那么这将是解决方案

require(ggplot2)
miss <- sample(c(NA, 1:5), nrow(mtcars), rep = TRUE)
qplot(mpg, wt, data = mtcars, colour = miss) +
scale_colour_gradient(na.value = "black", name = bquote('' ~W ~ m^-2~h^-1*''))

enter image description here