1

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

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 代码中遗漏了什么吗?任何事情都会有所帮助

4

2 回答 2

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()

在此处输入图像描述

于 2012-08-13T19:48:30.077 回答
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")

但是请注意,这并不是一个常用术语意义上的堆积条形图。

于 2012-08-13T19:45:09.123 回答