如何在ggplot中创建类似于莱迪思创建的颜色栏

时间:2018-05-03 07:09:24

标签: r ggplot2 lattice colorbar

我希望用ggplot创建的colourbar与spplot函数(来自lattice包)创建的类似。像附加图像那样将每个有限数量的颜色分配给矩形块,而不是创建连续的颜色光谱。我需要能够定义颜色条的轮廓颜色以及刻度线的格式。

An example of what I wish to have

我把这个简单的例子放在一起。如何将其更改为与此附加图像类似的内容?例如,我希望图例从-3开始,以3个10块颜色结束。我已经在“指南”功能中尝试了'nbin'。但是我需要将标签放在颜色块的“边缘”而不是它们的中间(即箱子的中心)。

ps:有时ggplot会创建超出颜色条长度的标签!

library(ggplot2)

dat <- data.frame(x = rnorm(100), y = rnorm(100), col=rnorm(100))

ggplot(dat, aes(x,y,color=col)) + 
  geom_point() + 
  scale_color_gradient2(limits=c(-3,3), midpoint=0) +             
  guides(color=guide_colourbar(nbin=10, raster=FALSE))

1 个答案:

答案 0 :(得分:1)

我认为使用最新(公开)版本的ggplot2无法满足您的要求。

丑陋的方法,由您自行决定

但是,如果你安装开发版本(这导致某些版本与我机器上的其他软件包发生冲突,我猜有些东西还没有完全正常工作)使用

devtools::install_github("tidyverse/ggplot2")
library(ggplot2)

您将获得更多选项来修改ticks.colourframe.colourframe.linewidth等指南,以便您根据自己的要求自定义颜色栏:

set.seed(6)
dat <- data.frame(x = rnorm(100), y = rnorm(100), z=rnorm(100))
ggplot(dat, aes(x,y,color=z)) + geom_point() +
  scale_color_gradientn(colours=c("blue","gray80","red"), limits=c(-3,3),
    breaks=c(-3/9*8,-3/9*4,0,3/9*4,3/9*8), labels=c(-2.4,-1.2,0,1.2,2.4), na.value = "green",
    guide=guide_colorbar(nbin=10, raster=F, barwidth=20, frame.colour=c("black"),
                         frame.linewidth=1, ticks.colour="black",  direction="horizontal")) +
  theme(legend.position = "bottom") 
  • 使用colours = c()指定颜色矢量
  • breakslabels一起使用,以沿着色条在正确的位置手动指定标签。 编辑:我们可以通过将3(沿着颜色条的一半长度)除以9来轻松计算沿着颜色条所需的位置(从条形中间到中心有9个半框)第一个框)并将其乘以我们希望标签出现的半框数。
  • limits以外的值将根据na.value
  • 着色
  • 您还可以指定name = "Your Variable Name"来替换colorbar旁边的z

Colorbar with values between colors and a black contour around bar

我认为没有办法将-3 / 3放在颜色条的最末端,除了手动将文本元素放在图中的正确位置(我强烈反对)。