Ggplot 2使用密度标尺生产高度不正确的geombars

时间:2015-02-05 21:10:34

标签: r ggplot2

我正在对调查回复进行一系列双变量分类分析。由于某些响应更为常见,因此我使用geom_bars密度比例,以便偏斜数据确实会扭曲差异。由于密度缩放应该强制总和为1或100%,我很困惑为什么条形总和大约为1.12。

该数据是4600份调查回复。我不确定如何举例说明实际上有助于重现图形差异的数据。如果没有大样本,就不值得谈论密度......数据是这样的,每个响应当然都有很多其他变量。

data <- data.frame(pm = c(1, 1, 2, 2, 2, 3), 
                   wt = c(12, 16, 86, 56, 10, 34), 
                   VA = c("Yes", "No", "No", "No", "Yes", "Yes"))

这是我用来绘制其中一个变量的代码的基本示例:

  plot <- 
  ggplot(data,aes(factor(VA),weight=wt,fill=factor(pm))) +
  geom_bar(aes(y=..density..,group=factor(pm)),
           position="dodge")

我已经分别计算了下表,这些是我希望在图表中显示的值。

                     Available  Not Available
Cash Ridership %     28.18      71.82 
Pass Ridership %     52.40      47.60
10-Ride Ridership %  45.80      54.20
相反,现金的条形显示为32%和80%,而不是28%和72%。我以类似方式制作的所有其他图表都存在同样的问题,但直到这一点我才真正注意到。

1 个答案:

答案 0 :(得分:0)

请注意,在?stat_bin中,它说的是密度(强调我的)

  

bin中的点密度,缩放为整合到1

此外,width的默认参数为width = 0.9。因此,默认情况下,高度会缩放为总计1/0.9 = 1.111。所以有两种可能的解决方案:

更改宽度

ggplot(data,aes(factor(VA), weight=wt, fill=factor(pm))) +
  geom_bar(aes(y=..density.., group=factor(pm)),
           position="dodge", width = 1) 

重新调整密度

ggplot(data,aes(factor(VA), weight=wt, fill=factor(pm))) +
  geom_bar(aes(y=..density..*.9, group=factor(pm)),
           position="dodge")