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