ggplot2: есть ли способ наложения одного графика на все грани в ggplot

Я хотел бы использовать ggplot и faceting для построения ряда графиков плотности, сгруппированных по фактору. Кроме того, я хотел бы нанести другой слой плотности на каждую из граней, на которую не распространяются ограничения, налагаемые фасетой.

Например, граненый участок будет выглядеть так:

require(ggplot2)
ggplot(diamonds, aes(price)) + facet_grid(.~clarity) + geom_density()

и затем я хотел бы иметь следующий график с одной плотностью, наложенный поверх каждой из граней:

ggplot(diamonds, aes(price)) + geom_density()

Кроме того, ggplot с огранкой является лучшим способом сделать это, или есть предпочтительный метод?

1 ответ

Решение

Один из способов добиться этого - создать новый фрейм данных. diamonds2 который содержит только столбец price а потом два geom_density() звонки - тот, который будет использовать оригинальные diamonds и второе, которое использует diamonds2, Как в diamonds2 не будет колонны clarity все значения будут использоваться во всех аспектах.

diamonds2<-diamonds["price"]
ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) + 
     geom_density(data=diamonds2,aes(price),colour="blue")

введите описание изображения здесь

ОБНОВЛЕНИЕ - как предложено @BrianDiggs, тот же результат может быть достигнут без создания нового фрейма данных, но трансформируя его внутри geom_density(),

ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) +
     geom_density(data=transform(diamonds, clarity=NULL),aes(price),colour="blue")

Другим подходом было бы построить данные без огранки. Добавить два звонка geom_density() - одним дополнением aes(color=clarity) иметь линии плотности разных цветов для каждого уровня clarity и оставить пустым секунду geom_density() - это добавит общую черную линию плотности.

ggplot(diamonds,aes(price))+geom_density(aes(color=clarity))+geom_density()

введите описание изображения здесь

Другие вопросы по тегам