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

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

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

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

enter image description here

UPDATE - как было предложено @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() - в один add aes(color=clarity), чтобы иметь линии плотности в разных цветах для каждого уровня clarity и оставить пустую секунду geom_density(), что добавит общую черную линию плотности.

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

enter image description here