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

col*_*lin 2 plot r 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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

eip*_*i10 5

创建一个包含所需标签文本的向量,包括任何特殊的绘图数学表达式,然后用于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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:您可以将单位放在图例旁边,但您可能需要手动调整它才能正确放置(尽管比我更了解 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述