首页 > 解决方案 > 如何在 ggplot 中创建类似于 Lattice 创建的颜色条

问题描述

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

我希望拥有的一个例子

我把这个简单的例子放在一起。如何将其更改为类似于此附加图像的内容?例如,我希望图例从 -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))

标签: rggplot2latticecolorbar

解决方案


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

丑陋的方法,自行判断

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

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

您将获得更多选项来修改指南,例如ticks.colour,frame.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()指定颜色向量
  • breaks与 一起使用可labels在颜色条的正确位置手动分配标签。编辑:我们可以通过将 3(沿颜色条的一半的长度)除以 9(从条的中间到第一个框的中心有 9 个半框)并乘以来轻松计算沿颜色条所需的位置通过我们希望标签出现的半框的数量。
  • 之外的值limits将根据na.value
  • 您还可以指定name = "Your Variable Name"替换z颜色栏旁边的

具有颜色之间值的颜色条和条周围的黑色轮廓

除了手动将文本元素放置在绘图中的正确位置(我强烈建议不要这样做)之外,我认为没有办法将 -3 / 3 放在颜色条的最末端。


推荐阅读