7

0.8.9 では問題なく動作したが、0.9.1 では動作しなかった ggplot コードがいくつかあります。

のデータをプロットするつもりでtheDF、縦線をプロットしたいのはxintercept="2010 Q1." theGridを作成するためだけtheDFです。

theGrid <- expand.grid(2009:2011, 1:4)
theDF <- data.frame(YrQtr=sprintf("%s Q%s", theGrid$Var1, theGrid$Var2), 
                    Minutes=c(1000, 2200, 1450, 1825, 1970, 1770, 1640, 1920, 1790, 1800, 1750, 1600))

使用されるコードは次のとおりです。

g <- ggplot(theDF, aes(x=YrQtr, y=Minutes)) + 
         geom_point() + 
         opts(axis.text.x=theme_text(angle=90))

g + geom_vline(data=data.frame(Vert="2010 Q2"), aes(xintercept=Vert))

繰り返しますが、これは ggplot2 0.8.9 を使用する R 2.13.2 では正常に機能しましたが、ggplot2 0.9.1 を使用した R 2.14+ では機能しません。

回避策は次のとおりです。

g + geom_vline(data=data.frame(Vert=4), aes(xintercept=Vert))

しかし、それは私の問題の良い解決策ではありません。

多分いじることscale_x_discreteが役立つかもしれませんか?

4

2 に答える 2

16

これを試すことができます:

g + geom_vline(aes(xintercept = which(levels(YrQtr) %in% '2010 Q1')))

これにより、選択した因子レベルのダミー データ フレームを作成する必要がなくなります。which() コマンドは、vlines に関連付ける因子レベルのインデックス (%in% 演算子の右側がベクトルの場合はインデックス) を返します。

これに関する 1 つの注意点は、一部のカテゴリがデータにdrop = TRUE表示されず、スケールで使用すると、線が適切な場所に表示されないことです。

于 2012-06-19T13:23:32.990 に答える
2

プロットの x 軸に文字ベクトルまたは因子を使用する場合、一意の項目のそれぞれに与えられる既定値は、1 から始まる単純な整数です。したがって、レベルが c("A" "B" , "C") の場合、x 軸の位置は c(1,2,3) です。文字の位置というものはなく、文字ラベルだけです。A に垂直線が必要な場合は、1 に配置します。A と B の中間に配置する場合は、1.5 に配置します。繰り返しますが、これらはデフォルトです。特定のプロットが何か他のことをした場合、いくつかの場所に線を置いて何が起こるかを見ることで簡単に解決できます。

于 2012-06-19T02:01:10.783 に答える