分面密度直方图

时间:2015-05-14 17:12:14

标签: r ggplot2

我试图并排绘制两个直方图,显示每种条件下每个观察值的密度。

例如,如果我有以下数据框:

> (test <- data.frame(rain=c(T,T,T,F,F), bikes=as.integer(c(1,1,2,1,2)), location=as.factor(c('a','b','a','b','b'))))
   rain bikes location
1  TRUE     1        a
2  TRUE     1        b
3  TRUE     2        a
4 FALSE     1        b
5 FALSE     2        b

然后我想画一个雨的直方图= FALSE,两个高度为0.5的条;另一个是降雨= TRUE,高度为1/3和2/3。

我试过这个

ggplot(test, aes(x=bikes, y=..density..)) + 
  geom_bar() + 
  scale_x_discrete() + 
  facet_wrap(~rain) + 
  scale_y_continuous(breaks=seq(0, 1, 0.05))

并且它给出了正确的形状,但是每个柱子的高度大约是10%:

Bad density picture

我也试过了y=..count../sum(..count..),但是条形高度是0.2,0.2,0.4,0.2 - 它似乎是对整个数据框进行求和,而不仅仅是rain条件

(我没有真正得到..foo..语法。我已经看过this answer,但我仍然没有找到density和{{ 1}}来自。)

我知道我可以创建一个临时数据框来代替,但我更愿意避免这种情况 - 从同一个数据框中做所有事情对于我将来可能要做的事情感觉更灵活 - 而且我还没有想出一个非常糟糕的方法。

理想情况下,我还希望通过count为条形图上色。如果我使用location执行此操作,我会得到以下结果:

enter image description here

显然,在四个条件(雨-a,雨-b,干-a,干-b)中的每一个条件下计算统计量。我希望它只能在雨/干条件下计算。

1 个答案:

答案 0 :(得分:1)

Heyo,为了让R做你想做的事情,修改你的数据框要容易得多。使用DECLARE @NUMBER INT DECLARE @RECO NVARCHAR(10) DECLARE @RECO_OLD NVARCHAR(10) DECLARE db_cursor CURSOR FOR SELECT DISTINCT RecoNumber FROM Workbook2014_Test.dbo.Reco OPEN db_cursor FETCH NEXT FROM db_cursor INTO @RECO SET @NUMBER = 1 SET @RECO_OLD = @RECO WHILE @@FETCH_STATUS = 0 BEGIN UPDATE Workbook2014_Test.dbo.Reco SET Item = @NUMBER WHERE RecoNumber = @RECO FETCH NEXT FROM db_cursor INTO @RECO IF(@RECO != @RECO_OLD) SET @NUMBER = 1 ELSE SET @NUMBER = @NUMBER + 1 END CLOSE db_cursor DEALLOCATE db_cursor 包:

plyr

corrected plot