首页 > 解决方案 > 如何在给定一列二进制数据的情况下使用 ggplot 制作多列图表

问题描述

我有这张表是从一个有 300 万个观察值的数据框中生成的。

    df_mc_day <- df_clean_distances %>% 
    mutate(weekday = factor(weekdays(df_clean_distances$started_at),levels=c("Monday", 
    "Tuesday", "Wednesday","Thursday", "Friday", "Saturday", "Sunday")), 
    mc=c(member_casual)) %>% tabyl(weekday, member_casual)
    df_mc_day %>% adorn_totals("row")
     weekday    casual  member
     Monday     147989  261391
     Tuesday    142020  278049
     Wednesday  154818  298865
     Thursday   162762  294189
     Friday     204401  299752
     Saturday   329738  316257
     Sunday     258167  259599
     Total     1399895 2008102

我想把它做成一个看起来像这样的图表 所需的输出图表

但我只能让 ggplot 在两个单独的图表中绘制成员或随意。我知道它与 mutate 有关,但我不明白 mutate 在做什么。


ggplot() + geom_col( data=df_mc_day, aes(x=weekday, y=member)) 
ggplot() + geom_col( data=df_mc_day, aes(x=weekday, y=casual)) 

会员专用图 仅休闲图

标签: rggplot2

解决方案


将数据重塑为“长”格式pivot_longer并使用ggplot

library(dplyr)
library(tidyr)
library(ggplot2)
df_mc_day %>%
    pivot_longer(cols = -weekday) %>%
    ggplot(aes(x = weekday, y = value, fill = name)) + 
       geom_col(position = 'dodge') + 
       theme_bw()

数据

df_mc_day <- structure(list(weekday = c("Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Saturday", "Sunday", "Total"), casual = c(147989L, 
142020L, 154818L, 162762L, 204401L, 329738L, 258167L, 1399895L
), member = c(261391L, 278049L, 298865L, 294189L, 299752L, 316257L, 
259599L, 2008102L)), class = "data.frame", row.names = c(NA, 
-8L))

推荐阅读