将ggplot2 colorbar刻度线更改为黑色

时间:2014-01-13 10:04:53

标签: r graphics plot ggplot2

在我的一些情节中,我发现很难看到颜色条中的刻度线。我无法找到改变蜱虫颜色的文件化方法。所有示例似乎都专注于更改标签或根本不绘制刻度。有可能吗?

#  Data
require(ggplot2)
require(grid)
n <- 100
x <- y <- seq(-4*pi, 4*pi, len=n)
r <- cos( sqrt( outer(x^2, y^2, "+") ) ^ 2 )
df <- data.frame( x = rep( x , each = n) , y = rep( y , times = n ) , val = c(r) )

#  Plot
ggplot( df , aes( x , y , fill = val ) )+
  geom_raster()+
  scale_fill_gradient( low = "#FFFFFF" , high = "#de2d26" )+
  guides( fill = guide_colourbar( barheight = unit( 3 , "in" ) ) )+
  theme_bw()+
  theme( line = element_line( colour = "#0000FF" ) )

enter image description here

如何在不更改绘图的其他元素的情况下,将颜色栏中的刻度线绘制为黑色而不是白色?


P.S。为this question创建示例数据的函数赞誉

3 个答案:

答案 0 :(得分:10)

我经常通过广泛使用str找到我需要改变的东西。我相信其他人可以更优雅地做到这一点。

g <- ggplotGrob(p)
g$grobs[[8]][[1]][[1]]$grobs[[5]]$gp$col <- "black"

library(grid)
grid.draw(g)

enter image description here

答案 1 :(得分:10)

编辑:请参阅以下Claus Claus的答案。

我在下面列出了原始答案,但请注意它现已过时,我不建议使用它。

我在ggplot2的fork中包含了自定义刻度线和图例边框的功能。 I have submitted a pull request,但我想如果他们偶然发现这个问题我会让人们知道。

使用以下代码

安装我的fork
if (!require(devtools))
  install.packages('devtools')
install_github('paleo13/ggplot2')

我们可以使用以下代码

指定黑色标记
ggplot(df, aes( x, y, fill = val)) +
  geom_raster() +
  scale_fill_gradient(low = "#FFFFFF", high = "#de2d26") +
  theme_bw() +
  theme(line = element_line(colour = "#0000FF")) +
  guides(fill = guide_colourbar(barheight = unit(3, "in"),
   ticks=element_line(color='black'), border=element_line(color='black')))

black ticks and color ramp border

(我会将此作为评论包含在内,但我缺乏这样做的声誉,如果任何有足够权限的人想要删除此答案并将内容移至评论中那么随意)

答案 2 :(得分:3)

另一个答案中提到的pull请求从未进入ggplot2代码库,但现在可以在开发版本中略微不同的方式(将作为ggplot2 2.3发布):

ggplot(df, aes(x, y, fill = val)) +
  geom_raster() +
  scale_fill_gradient(low = "#FFFFFF", high = "#de2d26") +
  guides(fill = guide_colourbar(barheight = unit( 3 , "in" ),
                                ticks.colour = "black",
                                ticks.linewidth = 1)) +
  theme_bw() +
  theme(line = element_line(colour = "#0000FF"))

enter image description here

您还可以添加一个框架,当颜色条中的某些颜色非常浅时,这可能很有用。

ggplot(df, aes(x, y, fill = val)) +
  geom_raster() +
  scale_fill_gradient(low = "#FFFFFF", high = "#de2d26") +
  guides(fill = guide_colourbar(barheight = unit( 3 , "in" ),
                                ticks.colour = "black",
                                ticks.linewidth = 1,
                                frame.colour = "black",
                                frame.linewidth = 1)) +
  theme_bw() +
  theme(line = element_line(colour = "#0000FF"))

enter image description here