R中的三元变量堆积线/面积图

时间:2019-05-29 20:48:33

标签: r ggplot2 geom-area

我正在尝试使用ggplot和geom_area函数生成堆积线图/面积图。根据我的判断,我已将数据正确加载到R中。每次生成图时,图形都是空的(即使轴看起来正确,除了按字母顺序组织的月份除外)。

我尝试使用data.frame函数定义变量,但无法生成图。我还查看了Stack Overflow和其他网站,但似乎没有人出现没有错误的问题,但仍然是一片空白。

这是我的数据集:

enter image description here

这是我当前正在使用的代码:

ggplot(OHV, aes(x=Month)) + 
  geom_area(aes(y=A+B+Unknown, fill="A")) + 
  geom_area(aes(y=B, fill="B")) + 
  geom_area(aes(y=Unknown, fill="Unknown"))

下面是输出:

enter image description here

我的错误消息为零,只是图表上没有数据绘制。

1 个答案:

答案 0 :(得分:0)

您的日期被解释为一个因素。您必须对其进行转换。

ibrary(tidyverse)
set.seed(1)
df <- data.frame(Month = seq(lubridate::ymd('2018-01-01'),
                             lubridate::ymd('2018-12-01'), by = '1 month'),
                 Unknow = sample(17, replace = T, size = 12), 
                 V1 = floor(runif(12, min = 35, max = 127)),
                 V2 = floor(runif(12, min = 75, max = 275)))

df <- df %>% 
  dplyr::mutate(Month = format(Month, '%b')) %>% 
  tidyr::gather(key = "Variable", value = "Value", -Month)

ggplot2::ggplot(df) +
  geom_area(aes(x = Month, y = Value, fill = Variable), 
            position = 'stack')

enter image description here

请注意,我使用tidyr::gather能够以更简单的方式堆叠区域。

现在假设您的分析年份为2018,则需要用r的解释将数据框的日期转换为连续的日期。

df2 <- df %>% 
  dplyr::mutate(Month = paste0("2018-", Month, "-01"),
                Month = lubridate::parse_date_time(Month,"y-b-d"),
                Month = as.Date(Month))

library(scales)
ggplot2::ggplot(df2) +
  geom_area(aes(x = Month, y = Value, fill = Variable), 
            position = 'stack') +
  scale_x_date(labels = scales::date_format("%b"))

enter image description here