Обычно я ждал воспроизводимого примера, но в этом случае я бы сказал, что основное объяснение действительно довольно простое:
geom_density()
создает многоугольник, а не линию.
Используя образец набора данных из собственного пакета ggplot2, мы можем наблюдать ту же прямую линию под графиками плотности, охватывающую ось x и ось y. Цвет линии просто зависит от того, какой график находится поверх остальных:
p <- ggplot(diamonds, aes(carat, colour = cut)) +
geom_density()
а>
Обходной путь 1. Вы можете вручную рассчитать значения плотности для каждой группы цветов в новом фрейме данных и построить результаты, используя geom_line()
вместо geom_density()
:
library(dplyr)
library(tidyr)
library(purrr)
diamonds2 <- diamonds %>%
nest(-cut) %>%
mutate(density = map(data, ~density(.x$carat))) %>%
mutate(density.x = map(density, ~.x[["x"]]),
density.y = map(density, ~.x[["y"]])) %>%
select(cut, density.x, density.y) %>%
unnest()
ggplot(diamonds2, aes(x = density.x, y = density.y, colour = cut)) +
geom_line()
Обходной путь 2. Или вы можете взять данные, сгенерированные исходным графиком, и построить это с помощью geom_line()
. Однако цвета необходимо будет переназначить на значения легенды:
lp <- layer_data(p)
if(is.factor(diamonds$cut)) {
col.lev = levels(diamonds$cut)
} else {
col.lev = sort(unique(diamonds$cut))
}
lp$cut <- factor(lp$group, labels = col.lev)
ggplot(lp, aes(x = x, y = ymax, colour = cut)) +
geom_line()
person
Z.Lin
schedule
02.04.2018