В последнее время это сообщество очень помогло мне получить графики Ridgeline для работы с моими данными.
Сейчас я борюсь с их раскраской в соответствии с моими потребностями.
По сути, я хочу, чтобы мои случаи отображались в разных порядках, но они должны сохранять определенный цвет, чтобы наблюдения оставались узнаваемыми, даже если они представлены в другом порядке. Пока что мне не удалось применить доступные решения к моим требованиям.
Давайте возьмем, к примеру, эти данные, где у нас есть имя, среднее значение и SD
caseName caseMean caseSD
Svansdottir 2006 -0.0646 0.4032398
Guétin 2009 -0.4649 0.3995663
Raglio 2010a -0.2145 0.2814031
Давайте сначала отсортируем их по caseMean
df$caseName <- factor(df$caseName, levels = df$caseName[order(df$caseMean)])
и нанесите его с помощью следующего кода
library(tidyverse); library(ggridges)
n = 100
df3 <- df %>%
mutate(low = caseMean - 3 * caseSD, high = caseMean + 3 * caseSD) %>%
uncount(n, .id = "row") %>%
mutate(x = (1 - row/n) * low + row/n * high,
norm = dnorm(x, caseMean, caseSD))
ggplot(df3, aes(x, caseName, height = norm, fill=caseName)) +
geom_ridgeline(scale = 2,alpha=0.75) +
scale_fill_viridis_d()
мы получаем это: ![sorted by caseMean](https://i.stack.imgur.com/vhVC4.png)
Теперь мы изменим порядок
df$caseName <- factor(df$caseName, levels = df$caseName[order(-df$caseMean)])
и нанесите еще раз с кодом выше, мы видим, что графики поменяли цвет: ![cases in reverse order](https://i.stack.imgur.com/baZ9C.png)
Как я могу убедиться, что одни и те же чехлы всегда имеют одинаковые цвета, независимо от того, в каком порядке я их разместил?
Я хотел бы иметь код, который не требует от меня "жесткой" привязки цветов к конкретному имени случая. Я хочу быть в состоянии сделать это для графиков с 20, 30 или более наблюдениями. Тот факт, что я выбрал цветовую палитру viridis, не имеет значения. Я доволен любым решением (например, с помощью heat.colors или чего-то подобного)