ggplot刻度颜色梯度的范围数据的范围之外(ggplot scale color gradient

2019-07-05 09:05发布

我在寻找一种方式来舒展两个值之间的渐变色和标签的传说,无论在数据集中的数据值的范围。 从本质上讲,是有功能上等同的ylim()为颜色渐变?

定的代码,其通常绘制在-1和1之间的z值,我可以绘制和标记的梯度,如果中断是数据范围内:

library(ggplot2)

#generator from http://docs.ggplot2.org/current/geom_tile.html
pp <- function (n, r = 4) { 
  x <- seq(-r * pi, r * pi, len = n)
  df <- expand.grid(x = x, y = x)
  df$r <- sqrt(df$x^2 + df$y^2)
  df$z <- cos(df$r^2) * exp(-df$r / 6)
  return(df)
}

t <- pp(30)
summary(t)
b <- c(-.5, 0, .5)
colors <- c('navyblue', 'darkmagenta', 'darkorange1')
p <- ggplot(data = t, aes(x = x, y = y))+
  geom_tile(aes(fill = z))+
  scale_fill_gradientn(colors = colors, breaks = b, labels = format(b))
ggsave(plot = p, filename = <somefile.png>, height = 3, width = 4)

但是,当我改变观测范围之外的休息时间值,渐变色似乎没有调整和梯度标签不会出现。

b <- c(-3, 0, 3)

Answer 1:

重要的是要记住,在ggplot,是非常重要的breaks将基本不会改变本身的规模。 它只会改变所显示的指南或传说英寸

你应该改变比例的限制,而不是:

ggplot(data=t, aes(x=x, y=y)) +
  geom_tile(aes(fill=z)) +
  scale_fill_gradientn(limits = c(-3,3),
  colours=c("navyblue", "darkmagenta", "darkorange1"),
  breaks=b, labels=format(b))

现在,如果你想要出现在传说中的休息,以进一步扩展,你可以改变它们来设置使刻度线出现。

一个很好的比喻牢记始终是常规x和y轴。 设置“休息”会有只是改变在刻度线出现。 如果你想改变x或y轴的程度 ,你通常会改变他们一样的“极限”的设置。



文章来源: ggplot scale color gradient to range outside of data range