ggplot значительно упрощает групповые операции, подобные этой, потому что вам просто нужно сопоставить переменную группировки с эстетикой, используемой для дифференциации групп (здесь fill
), и она позаботится о цветах и легендах для вас. (Вы можете настроить дальше, конечно.)
library(ggplot2)
ggplot(iris, aes(Sepal.Length, fill = Species)) + geom_density()
Если вы хотите сделать это при базовом графике, обычно проще всего сначала установить пустое окно, а затем выполнить итерации по группам. Поскольку вы хотите установить цвета, а также группы, Map
является более подходящим, чем lapply
. Легенды требуют дополнительного вызова.
plot(x = c(4, 8.5), y = c(0, 1.5), type = "n",
xlab = "Sepal Length", ylab = "Density",
main = "Density plot of multiple groups");
d <- lapply(split(iris$Sepal.Length, iris$Species), density)
Map(function(dens, col) polygon(dens, col = col),
dens = d, col = c('pink', 'lightgreen', 'lightblue'));
legend("topright", levels(iris$Species), fill = c('pink', 'lightgreen', 'lightblue'))