In some of my plots I find it hard to see the tick marks in the colour bar. I haven\'t been able to find a documented way to change the colour of the ticks. All the examples
The pull request mentioned in another answer never made it into the ggplot2 code base, but this is now possible in a slightly different way in the development version (slated to be released as 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"))
You can also add a frame, which may be useful when some of the colors in the colorbar are very light.
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"))
EDIT: Please refer to the answer below by Claus Wilke.
I have included the original answer below, but please note that it is now outdated and I do not recommend using it.
I included the functionality to customize tick marks and legend borders in my fork of ggplot2. I have submitted a pull request, but thought I would let people know here in case they stumble on this question.
Install my fork using the following code,
if (!require(devtools))
install.packages('devtools')
install_github('paleo13/ggplot2')
We can specify black marks using the following code,
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')))
(I would have included this as a comment but I lack the reputation to do so, if anyone with sufficient privileges wants to delete this answer and move the contents to the comments then feel free)
I usually find what I need to change by extensive use of str
. I'm sure others can do it more elegantly.
g <- ggplotGrob(p)
g$grobs[[8]][[1]][[1]]$grobs[[5]]$gp$col <- "black"
library(grid)
grid.draw(g)