我试图并排绘制两个直方图,显示每种条件下每个观察值的密度。
例如,如果我有以下数据框:
> (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%:
我也试过了y=..count../sum(..count..)
,但是条形高度是0.2,0.2,0.4,0.2 - 它似乎是对整个数据框进行求和,而不仅仅是rain
条件
(我没有真正得到..foo..
语法。我已经看过this answer,但我仍然没有找到density
和{{ 1}}来自。)
我知道我可以创建一个临时数据框来代替,但我更愿意避免这种情况 - 从同一个数据框中做所有事情对于我将来可能要做的事情感觉更灵活 - 而且我还没有想出一个非常糟糕的方法。
理想情况下,我还希望通过count
为条形图上色。如果我使用location
执行此操作,我会得到以下结果:
显然,在四个条件(雨-a,雨-b,干-a,干-b)中的每一个条件下计算统计量。我希望它只能在雨/干条件下计算。
答案 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