手动设置scale_fill_distiller()的比例尺

15

我试图制作一系列比较用的图表。例如,我想使用iris数据集制作一个仅查看setosa物种的图表:

library(ggplot2)
library(dplyr)

iris %>%
  filter(Species=="setosa") %>%
  ggplot(aes(y = Sepal.Width, x = Sepal.Length, fill = Petal.Length)) +
  geom_tile(stat = "identity") +
  scale_fill_distiller(palette = "Spectral")

enter image description here

现在如果我想以同样的方式绘制versicolor物种,我可以这样做:

iris %>%
  filter(Species=="versicolor") %>%
  ggplot(aes(y = Sepal.Width, x = Sepal.Length, fill = Petal.Length)) +
  geom_tile(stat = "identity") +
  scale_fill_distiller(palette = "Spectral")

输入图像描述

我的问题是这些图的填充比例不同。我知道我可以使用facet_wrap来解决这个问题,但是假设我需要单独的图。我想要的是将相同的填充比例应用于两个图。理想情况下,我仍然希望使用scale_fill_distiller,但是由于该函数的values参数略有不同,因此我无法很好地使用它,所以我尝试了scale_fill_gradientn。首先,我建立了一个fill_range,如下所示:

fill_range <- seq(min(iris$Petal.Length), max(iris$Petal.Length), by=0.2)

然后我尝试将该序列输入到scale_fill_gradientn的values参数中,就像这样:

iris %>%
  filter(Species=="versicolor") %>%
  ggplot(aes(y = Sepal.Width, x = Sepal.Length, fill = Petal.Length)) +
  geom_tile(stat = "identity") +
  scale_fill_gradientn(colours = terrain.colors(length(fill_range)),
                         values=fill_range)

iris %>%
  filter(Species=="setosa") %>%
  ggplot(aes(y = Sepal.Width, x = Sepal.Length, fill = Petal.Length)) +
  geom_tile(stat = "identity")  +
  scale_fill_gradientn(colours = terrain.colors(length(fill_range)),
                       values=fill_range)

这两种方法都没有产生期望的结果,绘制了一堆灰色的瓷砖,每个瓷砖上只有一个绿色的。

有人知道我在哪里手动指定`scale_fill_distiller`的比例尺吗?如果不可能,有人能看出我在使用`scale_fill_gradientn`时哪里出错了吗?


1
在每个图中设置填充的限制是否会得到所需的结果?例如,在scale_fill_distiller中使用limits = c(min(iris$Petal.Length), max(iris$Petal.Length)) - aosmith
哈!这么简单,我完全把它复杂化了。如果你想把它作为答案,我会立刻接受它。这正是我要找的。 - boshek
1个回答

23

您可以在 scale_fill_distiller 中将两个图的限制设置为相同。

Petal.Lengthminmax 用作限制:

iris %>%
    filter(Species=="setosa") %>%
    ggplot(aes(y = Sepal.Width, x = Sepal.Length, fill = Petal.Length)) +
    geom_tile(stat = "identity") +
    scale_fill_distiller(palette = "Spectral", 
                         limits = c(min(iris$Petal.Length), max(iris$Petal.Length)))

输入图像描述

iris %>%
    filter(Species=="versicolor") %>%
    ggplot(aes(y = Sepal.Width, x = Sepal.Length, fill = Petal.Length)) +
    geom_tile(stat = "identity") +
    scale_fill_distiller(palette = "Spectral", 
                         limits = c(min(iris$Petal.Length), max(iris$Petal.Length)))

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接