【问题标题】:Generating Stacked bar plots生成堆积条形图
【发布时间】:2012-02-13 15:53:50
【问题描述】:

我有一个包含 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

生成:

.

还有两个问题:

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

  2. 我也想去掉第 0 个标签。

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

注意。轴标注问题:Dataframe column appears incorrectly sorted

【问题讨论】:

  • 尝试以plyr::count开头
  • @hadley 和plyr::count,但你不能rbind,因为变量名不同。那是对的吗? x轴上的级别排序如何?
  • 你不需要 rbind

标签: r plot


【解决方案1】:

不完全确定您想看到什么...但是阅读?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')

【讨论】:

    【解决方案2】:

    我很惊讶没有在你的脸上爆炸。对每个长度为 35204 的三个不同向量的联合出现进行交叉分类通常会消耗许多 GB 的 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)
    

    【讨论】:

    • 我已经有了数据的密度图。只是想要另一种可视化方式。
    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 2017-02-26
    • 2020-11-10
    • 2014-02-09
    • 2020-09-14
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多