Изменение ggplot2 colourbar деления на черное

в некоторых моих сюжетах мне трудно увидеть галочки в цветовой полосе. Я не смог найти документированный способ изменить цвет галочки. Все примеры, похоже, сосредоточены на изменении меток или вообще не рисуют тики. Возможно ли это?

#  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

как я могу сделать так, чтобы Тики в цветовой панели были нанесены черным, а не белым, без изменения других элементов сюжета?


п.С. слава этот вопрос функции для создания примера данных

3 ответов


Я обычно нахожу, что мне нужно изменить с помощью широкого использования str. Я уверен, что другие могут сделать это более элегантно.

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

library(grid)
grid.draw(g)

enter image description here


редактировать: пожалуйста, обратитесь к ответу ниже Клаус Вильке.


Я включил оригинальный ответ ниже, но обратите внимание, что он теперь устарел, и я не рекомендую его использовать.

Я включил функциональность для настройки галочек и границ легенды в моей вилке ggplot2. я подал запрос на вытягивание, но я подумал, что дам людям знать здесь, если они наткнутся на это вопрос.

установите мою вилку, используя следующий код,

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

(Я бы включил это в качестве комментария, но у меня нет репутации, чтобы сделать это, если кто-то с достаточными привилегиями хочет удалить этот ответ и переместить содержимое в комментарии, то не стесняйтесь)


запрос на вытягивание, упомянутый в другом ответе, никогда не попадал в базу кода 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