【问题标题】:Steeper gradients in scale_gradientnscale_gradientn 中更陡峭的梯度
【发布时间】:2018-05-24 10:14:27
【问题描述】:

R 中使用ggplot2,我可以获得如下离散色标:

这可以生成为here

但是,它看起来并不好。我想删除级别之间的间距,我想也许我可以切换到一个连续的色阶,使用scale_gradientn() 并且在不同颜色之间有一个非常陡峭的渐变。 这样我就可以使用连续的色标,它在正确的位置有标签并且看起来很棒,而不是离散的。

但是,这是我能想到的最好的:

library(ggplot2)
ggplot(faithfuld, aes(waiting, eruptions)) +
  geom_raster(aes(fill = density)) +
  scale_fill_gradientn(
    colours = c("red", "green", "blue", "yellow"), 
    values=c(0, 0.25, 0.25001, 0.5, 0.5001, 0.75, 0.75001,1)
  )

这显然不够好,因为在 4 个级别之间可以看到明显的颜色偏移。

在ggplot2中这可能吗?

【问题讨论】:

  • 我无法理解您的目标。一开始你说你想要一个连续的尺度,但后来你似乎暗示你实际上想要一个离散的尺度。
  • 在示例中,我想要一个具有 4 种颜色的离散刻度,但具有连续刻度的优点:颜色之间的值,颜色级别之间没有空白。我过去曾尝试以多种方式实现这一点(请参阅链接的问题),并认为如果我可以让渐变变得无限陡峭,也许使用连续比例可能会起作用。

标签: r ggplot2 colors


【解决方案1】:

只需使用离散量表:

library(ggplot2)
faithfuld$classes <- cut(faithfuld$density, c(-Inf, 0.01, 0.02, 0.03, Inf))
ggplot(faithfuld, aes(waiting, eruptions)) +
  geom_raster(aes(fill = classes)) +
  scale_fill_manual(name = "density",
                    values = c("red", "green", "blue", "yellow"),
                    labels = c(0.01, 0.02, 0.03, "")) +
  guides(fill = guide_legend(label.vjust = -0.2))

【讨论】:

  • 这与我在链接问题中使用的方法相同,但它有许多缺点。首先,您必须使用标签定位值,并在每次更改绘图大小、标签数量等时更改它们。其次,一旦您使用图例(例如theme(legend.position="bottom")),您就会发现更多的调整是需要,这也需要更多地摆弄自定义值。
  • 如果你想做一些不寻常的事情(在我看来你根本不应该这样做),你应该预料到需要摆弄。
  • 这不是什么不寻常的事情,它是所有其他绘图系统(包括基本图形)都可以做到的事情。
  • 您所做的事情违反了我所理解的图形语法。连续导轨连接到连续刻度,离散导轨连接到离散刻度。连续的指南不应该与离散的比例一起使用。
  • 是的,我同意这一点。这将是一种解决方法。不幸的是,当前 ggplot 中的离散实现阻止使用这种常见的刻度类型,其中标签位于框之间,以指示间隔。
【解决方案2】:

您可以在主题中使用图例键高度 设置为

 legend.key.height =  unit(0, 'lines')

你是对的,必须进行一些试验和错误,我的情节如下所示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-15
    • 2021-07-16
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多