Вероятно, главная проблема здесь в том, что geom_col()
не примет другие эстетические свойства, если вы явно не скажете это. Один из способов получить то, что вы хотите, - использовать два вызова geom_col()
, чтобы создать две разные гистограммы, которые будут объединены в два разных слоя. Кроме того, вам необходимо создать информацию о дате, которую можно легко передать в ggplot()
; Я использую пакет lubridate()
для этой задачи.
Обратите внимание, что мы объединяем здесь столбцы "месяц" и "год", а затем используем ymd()
для получения значений даты. Я решил не преобразовывать столбец «date» с двойным значением в txhousing
, используя что-то вроде date_decimal()
, потому что иногда это может сбить с толку февральские и январские месяцы (например, 1 февраля «округляется» до 31 января).
Я решил построить подмножество набора данных txhousing
, который намного удобнее отображать в учебных целях.
Код:
library("tidyverse")
library("ggplot2")
# subset txhousing to just years >= 2011, and calculate nested means and dates
housing_df <- filter(txhousing, year >= 2011) %>%
group_by(year, month) %>%
summarise(monthly_mean = mean(sales, na.rm = TRUE),
date = first(date)) %>%
mutate(yearmon = paste(year, month, sep = "-"),
date = ymd(yearmon, truncated = 1), # create date column
salesdiff = monthly_mean - mean(monthly_mean), # monthly deviation
higherlower = case_when(salesdiff >= 0 ~ "higher", # for fill aes later
salesdiff < 0 ~ "lower"))
ggplot(data = housing_df, aes(x = date, y = salesdiff, fill = as.factor(higherlower))) +
geom_col() +
scale_x_date(date_breaks = "6 months",
date_labels = "%b-%Y") +
scale_fill_manual(values = c("higher" = "blue", "lower" = "red")) +
theme_bw()+
theme(legend.position = "none") # remove legend
Участок:
Здесь хорошо видно периодическое поведение; Увеличение продаж, как представляется, происходит каждую весну, причем продажи падают в осенние и зимние месяцы. Имейте в виду, что вы можете изменить цвета, которые я назначил, если вы хотите использовать этот код для температурных данных! Это было весело - удачи и счастливого заговора!