У меня есть фрейм данных, полный 0 и 1 (пример ниже), и я хотел бы создать график с: 1 ящик = 1 год, и если значение = 0, поле пусто, если оно равно 1, оно заполнено цвет.
Я искал с помощью ggplot2 и пытался сделать тепловую карту, но это только для непрерывной переменной, поэтому это не сработало. Я не думаю, что такой тип сюжета возможен с базовым R, так что если у вас есть идеи!
Результат может быть таким (сделанный с помощью excel):
An Qobs Q_mm Ptot Temp PE
1 1958 0 0 0 0 0
2 1959 1 1 1 1 1
3 1960 1 1 1 1 1
4 1961 1 1 1 1 1
5 1962 1 1 1 1 1
Извините за заголовок, он не очень явный, но я не знал, что написать.
@MrFlick Моим кодом был ggplot(lacune, aes(lacune$An, lacune$Qobs)) + geom_tile(aes(fill=1), colour = "black") + facet_grid(lacune$Qobs~lacune$An)
, который создавал странный сюжет!
Важное правило при работе с ggplot
- никогда не использовать $
внутри операторов или формул aes()
. Вы всегда должны передавать параметр data=
. См .: stackoverflow.com/questions/32543340/…
Во-первых, вам нужно изменить форму ваших данных, что может быть выполнено с помощью gather
, затем вы можете передать данные в ggplot2
и использовать `geom_tile. Остальные части вашего сюжета - это эстетические изменения, которые можно найти, посмотрев на документация для ggplot2.
library(tidyverse)
dat %>%
gather(col_name, value, -An) %>%
ggplot(aes(factor(An), col_name, fill = value == 1))+
geom_tile(colour = 'black')+
scale_fill_manual(values = c('FALSE' = 'white', 'TRUE' = 'blue'))
dat <- read.table(text = " An Qobs Q_mm Ptot Temp PE
1 1958 0 0 0 0 0
2 1959 1 1 1 1 1
3 1960 1 1 1 1 1
4 1961 1 1 1 1 1
5 1962 1 1 1 1 1")
Спасибо @bouncyball, все работает! Буду искать эстетические варианты.
Используйте ggplot geom_tile () (см. Примеры на этой странице). Покажите, что вы пытались сделать, и покажите, где именно вы застряли.