堆积的barplot

时间:2012-08-13 18:24:35

标签: r ggplot2

我从另一个类似问题中提取了以下示例代码,并尝试复制它。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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")

但是,请注意,这是堆积条形图,因为该术语是常用的。