我有一个包含3列的数据框
$x
- http://pastebin.com/SGrRUJcA $y
- http://pastebin.com/fhn7A1rj $z
- http://pastebin.com/VmVvdHEE 我希望用它来生成堆积的条形图。所有这些列都包含整数数据。堆积的条形图应具有沿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
生成:
还有两个问题:
x轴标记不正确。由于某种原因,它是:46,47,53,54, 38,40 ....我怎样才能自然地订购?
我也希望删除第0个标签。
我已尝试使用+scale_x_discrete(breaks = 0:50, labels = 1:50)
,但这不起作用。
答案 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)