我从另一个类似问题中提取了以下示例代码,并尝试复制它。
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")
以下叠加的条形码显示...
轮到我了!以下是数据的数据框
> 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")
我得到了这个......嗯?
我在ggplot2代码中遗漏了什么?什么都有助于thxs
答案 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")
使用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()
答案 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")
但是,请注意,这是不堆积条形图,因为该术语是常用的。