Как создать тепловую карту с помощью ggplot2?
Вопрос
Я пытаюсь создать тепловую карту с помощью ggplot2. Я нашел этот пример , который я, по сути, пытаюсь для репликации с моими данными, но у меня возникают трудности. Мои данные - это простой файл .csv, который выглядит так:
родовое словоЯ хотел бы создать простую тепловую карту, на которой название фрукта находится на оси x, а человек - на оси y. На графике должны быть изображены квадраты, где цвет каждого квадрата представляет количество съеденных фруктов. Квадрат, соответствующий общему коду кодового тега, должен быть самым темным.
Вот код, который я использую для создания тепловой карты:
родовое словоКогда я рисую эти данные, я получаю количество фруктов по оси X и людей по оси Y. Я также не получаю цветовых градиентов, отображающих количество фруктов. Как я могу получить названия фруктов по оси абсцисс с отображением количества фруктов, съеденных человеком, в виде тепловой карты? Текущий вывод, который я получаю в R, выглядит так:
Решение
Если честно, @ dr.bunsen - ваш приведенный выше пример плохо воспроизводился, и вы не читали первую часть руководства, которое вы ссылка .Вот, вероятно, то, что вы ищете:
родовое слово
Другие советы
Семь (!) лет спустя лучший способ правильно отформатировать ваши данные - это использовать tidyr
, а не reshape
Используя gather
из tidyr
, очень легко переформатировать ваши данные, чтобы получить ожидаемые 3 столбца (person
для оси Y, fruit
для оси x и count
для значений):
Теперь данные выглядят так:
родовое слово Отлично! Приступим к построению. Основная геометрия для создания тепловой карты с помощью ggplot2 - это geom_tile
, для которого мы предоставим эстетический код x
, y
и fill
.
Хорошо, неплохо, но мы можем добиться большего.
- Для тепловых карт мне нравится черно-белая тема
theme_bw()
, которая избавляется от серого фона. -
Мне также нравится использовать палитру из
RColorBrewer
(сdirection = 1
для получения более темных цветов для более высоких значений или -1 в противном случае). Доступных палитр очень много: Reds, Blues, Spectral, RdYlBu (красный-желтый-синий), RdBu (красный-синий) и т.д. Ниже я использую «Greens». ЗапуститеRColorBrewer::display.brewer.all()
, чтобы увидеть, как выглядят палитры. -
Если вы хотите, чтобы плитки были возведены в квадрат, просто используйте
coord_equal()
. -
Я часто считаю, что легенда бесполезна, но это зависит от вашего конкретного случая использования. Вы можете скрыть легенду сгенерированного кодового кода с помощью генерического кода кода.
-
Вы можете распечатать значения поверх плиток, используя
fill
(илиguides(fill=F)
). Это требует эстетики,geom_text
,geom_label
иx
, но в нашем случае,y
иlabel
наследуются. Вы также можете напечатать более высокие значения большего размера, передав кодx
в качестве эстетического - в этом случае вы также захотите передать кодy
вsize=count
, чтобы скрыть легенду размера. -
Вы можете рисовать линии вокруг плиток, передавая
size=F
вguides
.
Собираем все вместе:
родовое словоЧтобы удалить что-либо, просто удалите соответствующую строку.