手动设置scale_fill_distiller()的比例

bos*_*hek 7 r ggplot2

我正在尝试制作一系列用于比较的图.比如说,我想使用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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

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

在此输入图像描述

我的问题是这些情节的填充比例是不同的.我知道我可以facet_wrap解决这个问题,但我只想说我需要个别情节.我想要的是将相同的填充比例应用于两个图.理想情况下我想继续使用,scale_fill_distiller但由于该函数的值参数有点不同,我无法达到很远,所以我尝试了scale_fill_gradientn.首先我建立了fill_range这样的:

fill_range <- seq(min(iris$Petal.Length), max(iris$Petal.Length), by=0.2)
Run Code Online (Sandbox Code Playgroud)

然后我尝试将seq输入到values参数中,scale_fill_gradientn如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

这些都没有产生预期的结果,绘制一堆灰色瓷砖,每个都有一个绿色瓷砖.

有没有人知道我可以手动指定scale_fill_distiller"? If that is not possible, can anyone see where I have gone wrong withscale_fill_gradientn` 的比例?

aos*_*ith 13

您可以limits在两个图中将它们设置为相同scale_fill_distiller.

使用minmaxPetal.Length的限制:

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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述