У меня есть данные следующего вида:
Factor Var1 Var2
1 100 1.5
2 150 1.2
3 90 1.9
......
1 80 2.0
2 96 2.1
3 50 2.9
Я должен сравнить вариацию в Var2 с Var1 для разных факторов. Идея состоит в том, чтобы определить диапазон значений в Var1, соответствующий тому, какие низкие значения в Var2 и для какого фактора. У меня до 32 факторов.
Как лучше всего это сделать?
До сих пор я реализовал это как линейный график в ggplot (см. Рисунок ниже).
ggplot(data = df, aes(x = df$var1, y = df$var2, colour = df$Factor)) +
geom_line(size=0.05) +
geom_point(size=0.8) +
coord_cartesian(ylim = c(0,5)) +
labs(x='var1', y='var2')
Однако рисунок очень загроможден, и трудно различить шаблоны для различных факторов, особенно из-за цветовой кодировки в виде градиента.
Я также пробовал использовать разные формы для точек.
ggplot(data = df, aes(x = df$var1, y = df$var2, colour = df$factor)) +
geom_line(size=0.05) +
geom_point(size=0.8, aes(shape=factor(df$Factor))) +
coord_cartesian(ylim = c(0,5)) +
labs(x='var1', y='var2')
Но это дает предупреждающее сообщение (см. Ниже) и не отображает символы для всех факторов.
# Warning messages:
# 1: The shape palette can deal with a maximum of 6 discrete values because more than 6 becomes difficult to discriminate; you have 29. Consider specifying shapes manually if you must have them.
Как лучше всего визуализировать это изменение данных? Количество факторов может варьироваться (максимум 32).
** Как и предполагалось, я попробовал facet_wrap (см. Рис. Ниже).
ggplot(data = df, aes(x = df$var1, y = df$var2)) + geom_line(size=0.05) + geom_point(size=0.8) + coord_cartesian(ylim = c(0,5)) + facet_wrap(~ df$Factor) + labs(x='var1', y='var2') #+ geom_hline(yintercept = 2)
Для сравнения факторов я хотел бы добавить горизонтальную линию ко всем графикам. Но geom_hline (yintercept = 2) не помогает, выдает следующее сообщение об ошибке:
Error in `$<-.data.frame`(`*tmp*`, "PANEL", value = c(6L, 8L, 24L, 26L, : replacement has 1170 rows, data has 1
Как добавить ко всем этим графикам горизонтальную линию? В качестве альтернативы, есть ли способ разделить фрейм данных на меньшие фреймы данных, состоящие из 5-6 факторов вместо всех, и построить график для каждого из этих меньших наборов?