2012-08-13 120 views
1

我从另一个类似的问题采取以下示例代码,并试图复制它。堆叠式barplot

x <- structure(list(variable = c("a", "b", "c"), f = c(0.98, 0.66, 0.34), m = c(0.75760989010989, 0.24890977443609, 0.175125)), .Names = c("variable","f", "m"), row.names = c(NA, 3L), class = "data.frame") 

> x 
    variable f   m 
1  a 0.98 0.7576099 
2  b 0.66 0.2489098 
3  c 0.34 0.1751250 

当例子跑下面的代码:

ggplot(x, aes(variable, f,label=variable)) + 
    geom_bar() + geom_bar(aes(variable, m), fill="purple") 

以下叠置条字符显示...

enter image description here


轮到我了!以下是数据

> data 
       asset.std   asset.dstd symbols 
IEF 0.00470368279997122 0.00477691934631662  IEF 
SPY 0.0119358320227236 0.0130162006829043  SPY 
GSG 0.0137798134700255 0.0147096635302501  GSG 
VNQ 0.016058588692544 0.0169327904112519  VNQ 
TLT 0.0108803682930942 0.0109165197621356  TLT 
SHY 0.000635574928974698 0.000676146828833939  SHY 

的数据帧和我运行下面的代码

ggplot(data, aes(symbols, asset.std, label=symbols))+ 
    geom_bar() + geom_bar(aes(symbols, asset.dstd),fill="blue") 

和我得到这个代替....吧? enter image description here

我在ggplot2代码中丢失了什么吗?任何有助于thxs

+1

这不是一个堆积条形图。试着用更大的值*第一*(在你的情况下,'asset.dstd')和具有较低值*秒*的值绘制列。 'ggplot(DF,aes(symbols,asset.dstd,label = symbols))+ geom_bar()+ geom_bar(aes(symbols,asset.std),fill =“blue”)' – A5C1D2H2I1M1N2O1R2T1 2012-08-13 19:18:12

+0

真棒,我不知道订单的问题,非常感谢 – user1234440 2012-08-13 19:24:03

+0

你应该把它作为答案,所以我可以选择它作为正确的答案 – user1234440 2012-08-13 19:26:12

回答

3

看你的对象data

DF[1] - DF[2] 
#   asset.std 
# IEF -7.323655e-05 
# SPY -1.080369e-03 
# GSG -9.298501e-04 
# VNQ -8.742017e-04 
# TLT -3.615147e-05 
# SHY -4.057190e-05 

在所有情况下,asset.std小于asset.dstd;因此,如果你首先绘制了asset.std,那么当你绘制第二列时,你完全可以掩盖第一个情节!

复制的例子您提供,情节asset.dstd第一:

ggplot(DF, aes(symbols, asset.dstd, label=symbols)) + 
    geom_bar(fill="red") + 
    geom_bar(aes(symbols, asset.std), fill="blue", position="stack") 

但是请注意,这是不意义上堆积条形图,该术语通常使用。

4

几点。首先,我认为你的data不是你想象的那样; asset.std和/或asset.dstd看起来像是因素而不是数字。如果你看看str(data),你可能会看到这些变量是因素。如果我读入数据并绘制它,我会得到不同的结果。

data <- read.table(text= 
"    asset.std   asset.dstd symbols 
IEF 0.00470368279997122 0.00477691934631662  IEF 
SPY 0.0119358320227236 0.0130162006829043  SPY 
GSG 0.0137798134700255 0.0147096635302501  GSG 
VNQ 0.016058588692544 0.0169327904112519  VNQ 
TLT 0.0108803682930942 0.0109165197621356  TLT 
SHY 0.000635574928974698 0.000676146828833939  SHY", header=TRUE) 

ggplot(data, aes(symbols, asset.std, label=symbols))+ 
    geom_bar() + geom_bar(aes(symbols, asset.dstd),fill="blue") 

enter image description here

使用的dput输出(在你举的例子),消除了这一问题。

data <- 
structure(list(asset.std = c(0.00470368279997122, 0.0119358320227236, 
0.0137798134700255, 0.016058588692544, 0.0108803682930942, 0.000635574928974698 
), asset.dstd = c(0.00477691934631662, 0.0130162006829043, 0.0147096635302501, 
0.0169327904112519, 0.0109165197621356, 0.000676146828833939), 
    symbols = structure(c(2L, 4L, 1L, 6L, 5L, 3L), .Label = c("GSG", 
    "IEF", "SHY", "SPY", "TLT", "VNQ"), class = "factor")), .Names = c("asset.std", 
"asset.dstd", "symbols"), class = "data.frame", row.names = c("IEF", 
"SPY", "GSG", "VNQ", "TLT", "SHY")) 

其次,正如@mrdwab所说,这不是一个堆积条形图。这只是两组相互重叠的酒吧。首先绘制的集合较小,因此完全被第二组隐藏。使条块部分透明使得这一点很明显。

ggplot(data, aes(symbols, asset.std, label=symbols))+ 
    geom_bar(alpha=0.25) + 
    geom_bar(aes(symbols, asset.dstd),fill="blue", alpha=0.25) 

如果你真的想要吧堆叠,熔数据,然后绘制。

library("reshape2") 
ggplot(melt(data, id.vars="symbols"), 
     aes(symbols, value, fill=variable)) + 
    geom_bar() 

enter image description here

+0

我刚刚更新了这个数据的堆叠条形图的正确示例。 +1。 – A5C1D2H2I1M1N2O1R2T1 2012-08-13 19:53:30

+0

非常感谢Brian的回答。 – user1234440 2012-08-14 06:19:22