Через семь (!) Лет лучший способ правильно отформатировать ваши данные - использовать tidyr
вместо reshape
Используя gather
из tidyr
, очень легко переформатироватьваши данные, чтобы получить ожидаемые 3 столбца (person
для оси Y, fruit
для оси X и count
для значений):
library("dplyr")
library("tidyr")
hm <- readr::read_csv("people,apple,orange,peach
mike,1,0,6
sue,0,0,1
bill,3,3,1
ted,1,1,0")
hm <- hm %>%
gather(fruit, count, apple:peach)
#syntax: key column (to create), value column (to create), columns to gather (will become (key, value) pairs)
Данные теперь выглядят так:
# A tibble: 12 x 3
people fruit count
<chr> <chr> <dbl>
1 mike apple 1
2 sue apple 0
3 bill apple 3
4 ted apple 1
5 mike orange 0
6 sue orange 0
7 bill orange 3
8 ted orange 1
9 mike peach 6
10 sue peach 1
11 bill peach 1
12 ted peach 0
Отлично!Давайте начнем заговор.Основной geom для создания тепловой карты с ggplot2 - geom_tile
, для которой мы предоставим эстетические x
, y
и fill
.
library("ggplot2")
ggplot(hm, aes(x=x, y=y, fill=value)) + geom_tile()
Хорошо, не так уж плохо, но мы можем сделать намного лучше.
- Для тепловых карт мне нравится черно-белая тема
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
, чтобы скрыть легенду о размере.
Вы можете рисовать линии вокруг плиток, передавая color
в geom_tile
.
Соединяя все вместе:
ggplot(hm, aes(x=fruit, y=people, fill=count)) +
# tile with black contour
geom_tile(color="black") +
# B&W theme, no grey background
theme_bw() +
# square tiles
coord_equal() +
# Green color theme for `fill`
scale_fill_distiller(palette="Greens", direction=1) +
# printing values in black
geom_text(aes(label=count), color="black") +
# removing legend for `fill` since we're already printing values
guides(fill=F) +
# since there is no legend, adding a title
labs(title = "Count of fruits per person")
Чтобы удалить что-либо, просто удалите соответствующую строку.