【问题标题】:Stacked AND side-by-side barplot in ggplot()ggplot()中的堆叠和并排条形图
【发布时间】:2019-10-24 17:12:05
【问题描述】:

我有一个包含三个因子列的数据框。一列是“SurveyDate”列,其他列是关于调查对象的属性;说一个是“性别”,一个是“高中毕业生”

我想创建一个以日期为 x 轴的图,并使用并排条形图来表示男性和女性受访者的数量,并在这两个条形图的每一个中,堆叠高中毕业生与非-高中毕业生。

testDates <- sample(seq(as.Date('2019/1/1'), as.Date('2019/2/1'), by="day"), 100, replace = TRUE)
gender <- sample(c("F", "M"), 100, replace = TRUE)
graduate <- sample(c("Y", "N"), 100, replace = TRUE)
testdf <- data.frame(testDates, gender, graduate)

我可以创建一个日期频率与性别频率表,并使用它来创建并排图:

tbl <- with(testdf, table(testDates, gender))
ggplot(as.data.frame(tbl), aes(x=testDates, y=Freq, fill=gender)) +
+ geom_col(position='dodge

这会产生:

那么现在...我如何按毕业生划分这些酒吧? (是的,我应该为这个演示创建更多示例,但这个想法仍然有效。)

【问题讨论】:

    标签: r ggplot2 stacked-chart


    【解决方案1】:

    使用groupfill 可以实现您描述的输出。但是,我希望从下面的输出中可以清楚地看出,这可能不是可视化数据的好方法:

    library(ggplot2)
    testDates <- sample(seq(as.Date('2019/1/1'), as.Date('2019/2/1'), by="day"), 100, replace = TRUE)
    gender <- sample(c("F", "M"), 100, replace = TRUE)
    graduate <- sample(c("Y", "N"), 100, replace = TRUE)
     testdf <- data.frame(testDates, gender, graduate)
    
     tbl <- with(testdf, table(testDates, gender, graduate))
    ggplot(as.data.frame(tbl), aes(x=testDates, y=Freq, group=gender, fill = graduate)) +
       geom_col(position='dodge' )
    

    reprex package (v0.3.0) 于 2019 年 10 月 24 日创建

    更新

    使用interaction,您应该能够在填充比例上编码 2 个因子

    ggplot(as.data.frame(tbl), aes(x=testDates, y=Freq, group=gender, fill=interaction(gender,graduate))) + geom_col(position='dodge')

    【讨论】:

    • 这实际上非常接近我想要的。如果有办法把它做成四种颜色,那就接近完美了。
    • 我刚刚意识到你可以使用dodge 而不是group 看到这个stackoverflow.com/a/16029249/6086135
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2014-07-18
    • 2021-11-16
    • 2018-04-01
    相关资源
    最近更新 更多