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 seem to focus on changing the labels or not drawing ticks at all. Is it possible?
# 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" ) )
How can I make the ticks in the colourbar be plotted in black rather than white, without changing other elements of the plot?
p.s. kudos to this question for the function to create the example data
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With