如何使用ggplot和矩阵在R中制作堆积柱形图

时间:2013-12-14 22:06:56

标签: r ggplot2

大家好,我正在尝试使用矩阵在R中制作图形并使用ggplot包,因为R和ggplot可以为您提供与图形相关的元素的卓越品质。我有一个昏暗的20x20矩阵,我试图得到这样的东西:

enter image description here

我不喜欢使用excel,因为它的图形质量,因为我更喜欢R但我对ggplot知之甚少,我也不知道如何将矩阵中的最后一个值添加到矩阵的最后一列。也许你可以帮我解决这个问题。我试图绘制的矩阵的dput版本是下一个:

structure(c(29965719.12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 28429960.41, 1458624.41, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26906565.89, 1440212.75, 
942099.599999998, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 25313701.12, 1401632.04, 927322.780000001, 1210951.2, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23748204.59, 1373259.46, 
909312.66, 1193709.88, 1151423.89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 22257069.98, 1341041.19, 889758.559999999, 
1158986.03, 1136820.61, 1598355.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 20834214.97, 1305131.98, 856701.27, 1129474.09, 
1118606.69, 1578059.2, 1370856.78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 19477094.16, 1263379.53, 837751.299999997, 1104522.4, 
1092284.99, 1551142.64, 1354974.07, 1420547.36, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 18165404.24, 1221357.6, 817402.140000001, 
1075676.58, 1071100.22, 1485230.97, 1318482.08, 1404038.55, 2048291.06, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17042526.26, 1183285.92, 799139.77, 
1051973.84, 1049700.79, 1444005.64, 1279183.6, 1384857.86, 2026632.72, 
3043637.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15912055.89, 1150968.29, 
781767.969999999, 1027713, 1002821.26, 1416093.1, 1256348.38, 
1363220.55, 1995025.71, 3008201.12, 3669634.09, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 14837392.5, 1105477.16, 750258.4, 989174.439999999, 
979742.510000002, 1386614.86, 1231738.64, 1338049.47, 1960531.5, 
2930963.13, 3639935.05, 3641665.16, 0, 0, 0, 0, 0, 0, 0, 0, 13717721.37, 
1063604.11, 730910.129999999, 946145.08, 956427.08, 1356840.33, 
1188091.57, 1314698.33, 1919815.43, 2872918.27, 3587264.2, 3615734.97, 
6780879.37, 0, 0, 0, 0, 0, 0, 0, 12654080.83, 1034304.47, 689927.319999998, 
920539.020000001, 933540.619999999, 1312891.36, 1157533.56, 1273552.45, 
1883854.01, 2803699.4, 3508212.44, 3571759.54, 6728597.15, 6229245.09, 
0, 0, 0, 0, 0, 0, 11623390.05, 1007888.98, 671467.57, 875067.23, 
913815.460000001, 1222912.77, 1121345.7, 1218532.12, 1832366.96, 
2745773.97, 3399847.15, 3502858.93, 6604774.94, 6134253.45, 5553163.01, 
0, 0, 0, 0, 0, 10659885.1, 964108.52, 635246.380000001, 821454.51, 
885128.07, 1190048.79, 1090649.63, 1150376.15, 1783257.07, 2686616.54, 
3335146.8, 3406715.11, 6488674.75, 6014729.55, 5485803.42, 6372919.9, 
0, 0, 0, 0, 9735488.55, 938546.67, 607981.76, 786120.049999999, 
851119.98, 1162842.77, 1065054.88, 1073775.55, 1736231.45, 2614978.56, 
3271501.27, 3349167.83, 6368469.75, 5898741.78, 5418299.67, 6280598.84, 
6755054.64, 0, 0, 0, 8742383.48, 906474.289999999, 580510.6, 
755660.540000001, 829922.970000001, 1131575.38, 1039617.08, 1049134.57, 
1664696.67, 2552889.11, 3198760.39, 3264617.28, 6150581.39, 5627038.38, 
5316228.57, 6146363.09, 6677651.36, 7119008.27, 0, 0, 7882239.43, 
878026.84, 552812.210000001, 733031.09, 792261.039999999, 1097934.62, 
1014999.39, 1026214.95, 1630375.43, 2466505.47, 3145005.28, 3174913.27, 
6021366.2, 5462369, 5197168.91, 6012867.57, 6528649.55999999, 
7026048.51000001, 7585411.87, 0, 7116387.62, 850380.98, 499167.210000001, 
698711.68, 716107.529999999, 1070802.59, 981550.33, 977666.770000001, 
1595348.57, 2405959.16, 3084197.92, 3104095.11, 5928707.85, 5445385.54, 
5114034.19, 5886576.44000001, 6421200.57, 6749735.19, 7492647.16, 
7402737.51000001), .Dim = c(20L, 20L), .Dimnames = list(c("ene 10", 
"feb 10", "mar 10", "abr 10", "may 10", "jun 10", "jul 10", "ago 10", 
"sep 10", "oct 10", "nov 10", "dic 10", "ene 11", "feb 11", "mar 11", 
"abr 11", "may 11", "jun 11", "jul 11", "ago 11"), c("ene 10", 
"feb 10", "mar 10", "abr 10", "may 10", "jun 10", "jul 10", "ago 10", 
"sep 10", "oct 10", "nov 10", "dic 10", "ene 11", "feb 11", "mar 11", 
"abr 11", "may 11", "jun 11", "jul 11", "ago 11")))

非常感谢你的帮助和时间。

2 个答案:

答案 0 :(得分:1)

首先,需要将数据转换为长格式,即每行一个值。使用reshape2包很容易:

library(reshape2)
dat2 <- melt(dat)

其中dat是矩阵的名称。

默认情况下,R将按字母顺序排序因子级别。下一个命令恢复原始订单:

dat2 <- transform(dat2, X1 = factor(X1, colnames(dat)),
                        X2 = factor(X2, rownames(dat)))

计算dat的最后一列中值的总和:

finalVal <- sum(dat[ , ncol(dat)])

现在,可以绘制新数据框dat2。函数annotate用于显示最后一个条形图上方的文本。

library(ggplot2)
ggplot(dat2, aes(x = X2, y = value, fill = X1)) +
  geom_bar(stat = "identity") + 
  annotate("text", x = ncol(dat) - .5, y = finalVal + 2000000, 
           label = finalVal, size = 3)

x的参数yannotate允许定义文本的位置。在上面的代码中,我使用了- .5+ 2000000来微调位置。

enter image description here

答案 1 :(得分:0)

请使用d3.js库作为交互式graphs.it将为您提供api,用于制作多种类型的图表,并充分利用根据您的需求定制。