【问题标题】:Stacked Bar Chart in R using ggplot2使用 ggplot2 在 R 中堆积条形图
【发布时间】:2015-10-25 09:26:27
【问题描述】:

我正在尝试使用 ggplot2 创建堆积条形图。这是我的数据的样子

Date          Full.Page.Ads Total.Pages
11/10/2015                3          24
12/10/2015               10          24
13/10/2015               15          24

这是我试图用来可视化数据的代码

library("ggplot2")
library("reshape2")

ns <- read.csv("NS.csv")

ggplot(data=ns, aes(x = Date, y = Total.Pages, fill=Full.Page.Ads)) + geom_bar(stat = "identity")

但由于某种原因,它没有制作适当的堆叠条形图,而是不断制作类似http://imgur.com/rqxEzjF.jpg 的东西。而不是这个,我想将主栏显示为 Total.Pages 并在这些栏内显示不同颜色的 Full.Page.Ads 栏。

我不确定我在这里做错了什么。

这是我渴望制作的示例http://blog.visual.ly/wp-content/uploads/2012/08/StackedPercent.png

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您必须在绘图之前融化您的数据。如果您希望图表表示 Full.Page.Ads 相对于总页数的比例,您还需要计算 Total.Pages 和 Full.Page.Ads 之间的差异。比如:

    ns <- data.frame(Date = c("11/10/2015", "12/10/2015", "13/10/2015"),
                   Full.Page.Ads = c(3, 10, 15),
                   Total.Pages = c(24, 24, 24))
    
    #    Date Full.Page.Ads Total.Pages
    # 1 11/10/2015             3          24
    # 2 12/10/2015            10          24
    # 3 13/10/2015            15          24
    
    
    ns$not.Full.Page.Ads <- ns$Total.Pages - ns$Full.Page.Ads
    ns$Total.Pages <- NULL
    ns2 <-melt(ns)
    
    #        Date          variable value
    #1 11/10/2015     Full.Page.Ads     3
    #2 12/10/2015     Full.Page.Ads    10
    #3 13/10/2015     Full.Page.Ads    15
    #4 11/10/2015 not.Full.Page.Ads    21
    #5 12/10/2015 not.Full.Page.Ads    14
    #6 13/10/2015 not.Full.Page.Ads     9
    
    ggplot(data = ns2, aes(x = Date, y = value, fill = variable)) + geom_bar(stat = "identity")
    

    【讨论】:

    • 那行得通。谢谢你。你能解释一下这背后的逻辑吗?