В ggridges, как раскрасить точки кода, не получив множественных выступов?

Я пытаюсь показать точки на моем графике гребня индексом (PASS или FAIL в данном случае). Но когда я так делаю, у меня получается по два гребня на группу. Мне интересно, как иметь только один гребень на группу?

Мой код и изображение вывода ниже:

library(ggplot2)
library(ggridges)
library(scales)
ggplot(dataSet, aes(x = `Vector_fails`, y = Group, fill = Group)) +
  geom_density_ridges(alpha = .1, 
                      point_alpha = 1,
                      jittered_points = TRUE,
                      aes(point_color = PassCode)) +
  labs(title = 'Vector_fails') +
  scale_x_log10(limits = c(0.09, 1000000), 
                breaks = trans_breaks("log10", function(x) 10^x),
                labels = trans_format("log10", math_format(10^.x))) +
  annotation_logticks(sides="b")

Два выступа на группу (но мне нужен один)

введите описание изображения здесь


person Dave Datum    schedule 26.01.2020    source источник
comment
Можете ли вы предоставить небольшой воспроизводимый пример вашего кода? см. https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example   -  person dc37    schedule 26.01.2020


Ответы (1)


Если я правильно понимаю, OP хочет построить линию гребня для каждого Group независимо от PassCode. Кроме того, точки должны быть нанесены на график, но окрашены значением PassCode.

Одно из возможных решений - построить линии гребней без точек, а затем добавить второй слой, на котором точки нанесены, но (затем дублированные) линии гребней стали невидимыми:

library(ggplot2)
library(ggridges)
library(scales)
ggplot(dataSet, aes(x = `Vector_fails`, y = Group, fill = Group)) +
  geom_density_ridges(alpha = .1) + # plot rigdelines without points
  geom_density_ridges(alpha = 0, # plot points with invisible ridgelines
                      color = NA, 
                      jittered_points = TRUE, 
                      point_alpha = 1, 
                      aes(point_color = PassCode)) +
  labs(title = 'Vector_fails') +
  scale_x_log10(limits = c(0.09, 1000000), 
                breaks = trans_breaks("log10", function(x) 10^x),
                labels = trans_format("log10", math_format(10^.x))) +
  annotation_logticks(sides="b")

введите описание изображения здесь

Данные

Поскольку вопрос не включает какие-либо воспроизводимые данные, я попытался смоделировать OP dataSet

nr <- 1000L
set.seed(1L)
dataSet <- data.frame(
  Vector_fails = sample(9L, nr, TRUE) * 10^sample(c(0:1, 4:5), nr, TRUE),
  Group = sample(c("Normal", "Trial 1", "Trial 2"), nr, TRUE, prob = c(0.8, 0.1, 0.1)),
  PassCode = sample(c("PASS", "FAIL"), nr, TRUE)
)
person Uwe    schedule 26.01.2020