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 コードに何か不足していますか? 何でも役に立ちますthxs

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 が言ったように、これは積み上げ棒グラフではありません。これは、互いの上に描画された 2 つの棒のセットです。最初に描画されたセットは小さいため、2 番目のセットによって完全に隠されます。バーを部分的に透明にすると、これが明確になります。

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最初にプロットした場合、その上に 2 番目の列をプロットすると、最初のプロットが完全に隠れてしまいます。

提供した例を複製するには、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 に答える