2016-07-20 4 views
3

Я пытаюсь сделать серию сюжетов для сравнения. Скажем, например, я хотел бы использовать данные iris набора, чтобы сделать сюжет, как это, где я фильтруется, чтобы просмотреть только вид setosa:Вручную установить масштаб scale_fill_distiller()

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

Теперь, если я хочу, чтобы построить виды лишая таким же образом, что я могу сделать это так:

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

enter image description here

Моя проблема в том, что уточные весы ар e для этого сюжета. Я знаю, что мог бы это сделать, но давайте просто скажем, что мне нужны отдельные сюжеты. Я бы хотел использовать одну и ту же шкалу заполнения для обоих графиков. В идеале я бы хотел использовать scale_fill_distiller, но мне не удалось приблизиться, поскольку аргумент значений немного отличается для этой функции, поэтому я попробовал scale_fill_gradientn. Во-первых, я создан fill_range так:

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

Затем я попытался ввода с послед в значения аргумента в 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) 

Ни один из них получают желаемый результат, черчения кучу серого плитки и каждый с одним зеленым.

У кого-нибудь есть идея, где я могу вручную указать масштаб для scale_fill_distiller"? If that is not possible, can anyone see where I have gone wrong with scale_fill_gradientn`?

+0

ли задающий пределы заливки в каждом графике дают желаемого результата? Как 'limits = c (min (iris $ Petal.Length), max (iris $ Petal.Length))' в 'scale_fill_distiller'. – aosmith

+0

Ha! Настолько просто, что я полностью переусердствовал. Если вы хотите выразить это как ответ, я сразу приму его. Это именно то, что я искал. – boshek

ответ

7

Вы можете установить limits, чтобы они были одинаковыми на обоих участках в пределах scale_fill_distiller.

Использование min и max в Petal.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))) 

enter image description here

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))) 

enter image description here