Создайте матрицу диаграмм рассеяния (эквивалент пары ()) в ggplot2
117
Можно ли построить матрицу диаграмм рассеяния ggplot2, используя такие ggplotприятные функции, как сопоставление дополнительных факторов с цветом, формой и т. Д. И добавление более гладких?
для меня миль на галлон (первый столбец в mtcars) не должно быть фактором. Я не проверял, но нет причин, почему это должно быть. Однако я получаю диаграмму рассеяния :)
Примечание. Для справки в будущем эта plotmatrix()функция была заменена ggpairs()функцией из GGallyпакета, как предлагает @ naught101 в другом ответе на этот вопрос ниже.
Я не смог заставить работать фасетку над этой проблемой, кажется, это требует факторов в правой части формулы .. Или вы могли бы привести мне минимальный пример?
Карстен В.
1
Кто-нибудь знает, как добавить цвет? Кажется, я не могу заставить этот gist.github.com/1405150 работать
Этьен Лоу-Декари
1
Первая часть этого ответа неверна и вызывает путаницу. Вы не можете строить парные графики с фасетами: вы можете строить только графики y на x и группировать их по факторам. Другими словами, с фасетированием у вас есть одинаковые x и y на каждом участке; с парами у вас есть разные x в каждом столбце и разные y в каждой строке.
naught101
28
Для справки в будущем plotmatrix()функция была заменена ggpairs()функцией из GGallyпакета, как предлагает @ naught101 в другом ответе на этот вопрос.
smillig
1
@MattBannert добавил комментарий к вашему сообщению, чтобы сделать его более заметным, я мог бы понять тех, кто проголосовал против, если бы пропустил чтение комментариев. Надеюсь, ты не против.
zx8754 05
232
Я все время хочу это делать, но сюжетная матрица - дерьмо. Хэдли рекомендует вместо этого использовать пакет GGally . В нем есть функция ggpairs, которая представляет собой значительно улучшенный график пар (позволяет использовать прерывистые переменные в ваших фреймах данных). Он строит разные графики в каждом квадрате, в зависимости от типов переменных:
Это действительно здорово. Стоит отметить, что любая colourпеременная должна быть фактором; потратил 45 минут на выяснение этого.
gregmacfarlane
1
Есть ли способ построить эти корреляционные матрицы без пар? Например, мне нужно построить график первого столбца по сравнению с каждым другим столбцом. Gpairs дает очень возможную пару. Например, у меня есть 10 столбцов, и это дает мне 10 * 10 = 100. Но я хочу только
первую
1
@Rgeek: вы можете meltиспользовать фрейм данных, используя интересующую вас переменную в качестве переменной id, а затем фасетировать другие переменные.
naught101 05
6
Не используйте ggpairs, просто используйте ggplot2 как обычно, например ggplot(data, aes(x=id, y=value)) + geom_point() + facet_grid(.~variable). Я предполагаю, что вы говорите о диаграммах рассеяния, когда говорите «график корреляции», потому что я никогда не слышал об этом иначе.
Если кто-то хочет получить ggplotобъект ( ggmatrixа не как в случае ggpairs()), решение состоит в том, чтобы переплавить данные дважды, а затем ggplotс фасеткой. facet_wrapбыло бы лучше, чем facet_gridпри ограничении отображаемой области, если scales = 'free'параметр указан.
Ответы:
Вы можете попробовать plotmatrix:
для меня миль на галлон (первый столбец в mtcars) не должно быть фактором. Я не проверял, но нет причин, почему это должно быть. Однако я получаю диаграмму рассеяния :)
Примечание. Для справки в будущем эта
plotmatrix()
функция была замененаggpairs()
функцией изGGally
пакета, как предлагает @ naught101 в другом ответе на этот вопрос ниже.источник
plotmatrix()
функция была замененаggpairs()
функцией изGGally
пакета, как предлагает @ naught101 в другом ответе на этот вопрос.Я все время хочу это делать, но сюжетная матрица - дерьмо. Хэдли рекомендует вместо этого использовать пакет GGally . В нем есть функция ggpairs, которая представляет собой значительно улучшенный график пар (позволяет использовать прерывистые переменные в ваших фреймах данных). Он строит разные графики в каждом квадрате, в зависимости от типов переменных:
источник
colour
переменная должна быть фактором; потратил 45 минут на выяснение этого.melt
использовать фрейм данных, используя интересующую вас переменную в качестве переменной id, а затем фасетировать другие переменные.ggplot(data, aes(x=id, y=value)) + geom_point() + facet_grid(.~variable)
. Я предполагаю, что вы говорите о диаграммах рассеяния, когда говорите «график корреляции», потому что я никогда не слышал об этом иначе.GGally::ggpairs(iris, aes(colour = Species, alpha=0.4))
Если кто-то хочет получить
ggplot
объект (ggmatrix
а не как в случаеggpairs()
), решение состоит в том, чтобы переплавить данные дважды, а затемggplot
с фасеткой.facet_wrap
было бы лучше, чемfacet_grid
при ограничении отображаемой области, еслиscales = 'free'
параметр указан.источник