как добавить эллипсы в ggplot при использовании cut в geom_point - PullRequest
1 голос
/ 30 марта 2019

Я пытаюсь добавить эллипсы в ggplot (из ординации в Pkg vegan) на основе значений, которые были разрезаны на интервалы / группы для целей раскраски с использованием geom_point. Я думаю, что будет проще, если я приведу пример с использованием данных радужной оболочки:

data("iris")
T <- metaMDS(iris[1:4]) #perform an ordination with the package vegan
ScIris <- as.data.frame(scores(T)) #extract the values for plotting
RandomNumbers <- runif(150, 1, 100) #generate metaData used for colors
ScIris$test_stat <- RandomNumbers

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

ggplot(ScIris, aes(NMDS1, NMDS2)) +
geom_point(aes(colour = cut(test_stat, c(0, 25, 50, 75, 85,95, 99, 100))),
             size = 5) +
   stat_ellipse() +
  scale_color_manual(name = "proportions",
                     values = c("(0,25]" = "black",
                                "(25,50]" = "dark green",
                                  "(50,75]" = "green",
                                  "(75,85]" = "yellow",
                                   "(85,95]" = "orange",
                                    "(95,99]" = "purple",
                                    "(99,100]" = "blue",
                     labels = c("0", "25", "50", "75", "85", "95","<100")))

Исходя из этого поста ggplot2 рисует отдельные эллипсы, но цвет по группе Я попытался изменить аргумент stat_ellipse, но тогда ничего не будет отображаться правильно.

stat_ellipse(aes(x=NMDS1, y=NMDS2, colour = cut(test_stat, c(0, 25, 50, 75, 85,95, 99, 100), group=cut(test_stat, c(0, 25, 50, 75, 85,95, 99, 100)),type = "norm"))

Как добавить эллипс для каждой группы группировки / вырезания? Таким образом, черный эллипс для точек между 0-25, синий эллипс для 99-100 и т. Д. Ggplot великолепен, но есть крутая кривая обучения.

1 Ответ

1 голос
/ 31 марта 2019

Вы создаете группы на лету внутри geom_point (это то, что делает cut), но вам нужно снова использовать группы для эллипсов и их цветов. Так что лучше сначала определить группы.

library("tidyverse")
library("vegan")

data("iris")
T <- metaMDS(iris[1:4]) #perform an ordination with the package vegan

# For reproducibility
set.seed(1234)

ScIris <- as.data.frame(scores(T)) %>%
  mutate(test_stat = runif(150, 1, 100)) %>%
  mutate(group = cut(test_stat, c(0, 25, 50, 75, 85, 95, 99, 100)))

ggplot(ScIris, aes(NMDS1, NMDS2)) +
  geom_point(aes(colour = group), size = 5) +
  stat_ellipse(aes(color = group, group = group)) +
  scale_color_manual(name = "proportions",
                     values = c("(0,25]" = "black",
                                "(25,50]" = "dark green",
                                "(50,75]" = "green",
                                "(75,85]" = "yellow",
                                "(85,95]" = "orange",
                                "(95,99]" = "purple",
                                "(99,100]" = "blue",
                                labels = c("0", "25", "50", "75", "85", "95","<100")))
#> Too few points to calculate an ellipse
#> Warning: Removed 1 rows containing missing values (geom_path).

Создано в 2019-03-31 пакетом представ. (v0.2.1)

...