如何使用填充渐变修改绘图图例中的颜色?

时间:2016-06-24 09:29:21

标签: r ggplot2

跟进this question,您将如何修改等高线图图例的颜色?

以下是如何生成情节:

x <- rep(seq(0.01, 0.1, length.out = 50), 50)
y <- rep(seq(0.01, 0.1, length.out = 50), each = 50)
z <- 1 / (x^2 + y^2)

my.data <- data.frame(x, y, z)

ggplot(my.data, aes(x = x, y = y, fill = z)) +
  geom_tile() +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"),
                       values = rescale(c(0.3, 1, 2, 5, 10, 20, 35))) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

结果如下:

Ugly legend

我希望能够手动设置颜色(我知道如何为休息时间做这些),以便它更具可读性。在上面的示例中,您不能多说较低的值,这可能是最感兴趣的。蓝色甚至不会出现在图例中。

1 个答案:

答案 0 :(得分:0)

看起来你的values=...搞砸了。阅读文档并尝试使用values函数,看起来通过指定范围,您可以为每种颜色提供更少/更多的权重。我认为您遇到的问题是颜色仍然在图例中,但由于values调用它们被“加权”得太少,因此它们不可见(即它们在那里,但他们是传说中的一小部分。)

如果您尝试为values=...执行极值,则可以尝试此操作。我在这个例子中使用100:

ggplot(my.data) +
  geom_tile(aes(x = x, y = y, fill = z)) +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"),
                       values = rescale(c(0.3, 1, 2, 5, 10, 20, 100))) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

enter image description here

你可以看到,基本上整个传说都被红色接管,而且剧情中还有更多的红色。

要解决您的问题,您可以尝试不使用此类values=...的内容:

ggplot(my.data) +
  geom_tile(aes(x = x, y = y, fill = z)) +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"))+
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

enter image description here

然后你可以看到图例中有蓝色,但你的情节中有更多的蓝色。这是您数据的工件。如果您尝试quantile(my.data$z,c(seq(0,1,by=0.05))),您可以看到第95百分位数是~800,最大值是5000.正如您在图例中看到的那样,1000以下的值正在填充蓝色(这是您数据的95%!)

如果你希望它的蓝色较少,你可能会再次使用values(我不推荐 - 你可能想要准确地表示你的数据)。像这样:

ggplot(my.data) +
  geom_tile(aes(x = x, y = y, fill = z)) +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"),
                       values =rescale(c(0.3, 3, 4, 5, 10, 20, 35))) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

enter image description here

或者,我认为这是一个更好的解决方案,你可以摆脱你的异常值,所以你的情节不是倾斜的。现在,没有values操作的ggplot函数可以准确地表示您的数据。