生成堆积条形图

时间:2012-02-13 15:53:50

标签: r plot

我有一个包含3列的数据框

我希望用它来生成堆积的条形图。所有这些列都包含整数数据。堆积的条形图应具有沿x轴的水平和沿y轴的每个水平的数据。然后,堆栈应对应$x$y$z中的每一个。

更新:我现在有以下内容:

counted <- data.frame(table(myDf$x),variable='x')
counted <- rbind(counted,data.frame(table(myDf$y),variable='y'))
counted <- rbind(counted,data.frame(table(myDf$z),variable='z'))
counted <- counted[counted$Var1!=0,]  # to get rid of 0th level??

stackedBp <- ggplot(counted,aes(x=Var1,y=Freq,fill=variable))
stackedBp <-  stackedBp+geom_bar(stat='identity')+scale_x_discrete('Levels')+scale_y_continuous('Frequency')
stackedBp

生成:

stack plot

还有两个问题:

  1. x轴标记不正确。由于某种原因,它是:46,47,53,54, 38,40 ....我怎样才能自然地订购?

  2. 我也希望删除第0个标签。

  3. 我已尝试使用+scale_x_discrete(breaks = 0:50, labels = 1:50),但这不起作用。

    NB。轴标记问题:Dataframe column appears incorrectly sorted

2 个答案:

答案 0 :(得分:4)

不完全确定您想看到的内容......但是阅读?barplot说第一个参数height必须是向量或矩阵。所以要修复你的初始错误:

myDf <- data.frame(x=sample(1:10,100,replace=T),y=sample(11:20,100,replace=T),z=1:10)
barplot(as.matrix(myDf))

如果您提供可重现的示例以及您所需输出的更具体描述,您可以获得更好的答案。

或者如果我疯狂猜测(并使用ggplot)...

myDf <- data.frame(x=sample(1:10,100,replace=T),y=sample(11:20,100,replace=T),z=1:10)
myDf.counted<- data.frame(table(myDf$x),variable='x')
myDf.counted <- rbind(myDf.counted,data.frame(table(myDf$y),variable='y'))
myDf.counted <- rbind(myDf.counted,data.frame(table(myDf$z),variable='z'))

ggplot(myDf.counted,aes(x=Var1,y=Freq,fill=variable))+geom_bar(stat='identity')

答案 1 :(得分:3)

我很惊讶没有在你脸上爆炸。对三个不同向量的联合出现进行交叉分类,每个向量的长度为35204,通常会消耗许多千兆字节的RAM(并且可能会产生大量无用的0)。也许你想检查一下sapply(myDf, table)的结果?然后创建三个单独的计数表。

这是一个相当不规则的结果,需要进一步的工作才能将其变成矩阵形式,但您可能需要考虑使用densityplot来显示我认为是您的目标的比较分布。

$x

   1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
 126  711 1059 2079 3070 2716 2745 3329 2916 2671 2349 2457 2055 1303  892  692 
  17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32 
 559  799  482  299  289  236  156  145  100   95  121  133   60   34   37   13 
  33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48 
  15   12   56   10    4    7    2   14   13   28   30   20   16   62   74   58 
  49   50 
  40   15 

$y

   0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
3069   32 1422 1376 1780 1556 1937 1844 1967 1699 1910 1924 1047  894  975  865 
  16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31 
 635 1002  710  908  979  848  678  908  696  491  417  412  499  411  421  217 
  32   33   34   35   36   37   39   42   46   47   53   54 
 265  182  121   47   38   11    2    2    1    1    1    4 

$z

   0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
  31  202  368  655  825 1246  900 1136 1098 1570 1613 1144 1107 1037 1239 1372 
  16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31 
1306 1085  843  867  813 1057 1213 1020 1210  939  725  644  617  602  739  584 
  32   33   34   35   36   37   38   39   40   41   42   43 
 650  733  756  681  684  657  544  416  220   48    7    1 

在格子中创建密度图非常简单:

densityplot( ~x+y+z, myDf)

enter image description here