2016-10-28 9 views
0

ラフマンパッケージから抽出した単純なdata.frameのggplot2のFacets機能を使用してグラフをプロットしようとしています。 それにもかかわらず、間違った変数プロットにいくつかの観測値を置いています。 私はfacet_grid引数でいくつかの構成を使用しようとしましたが、それらのすべてが観測の配置が間違っています。ggplotのファセットが変数プロットに間違った観測を入れている

ここでは、プロットを再現するコードです。

library(Lahman) 
library(tidyverse) 
library(plotly) 

TmsStd <- Teams 

TmsStd <- TmsStd %>% select(yearID, lgID, teamID, divID, Rank, W, L, DivWin, WCWin, LgWin, WSWin, name, teamIDBR) 

TmsStd$WLPctg <- TmsStd$W/(TmsStd$W + TmsStd$L) 

TmsStd <- TmsStd %>% arrange(yearID, desc(WLPctg)) 

TmsStd$OvSeaRank <- ave(TmsStd$WLPctg, TmsStd$yearID, FUN = seq_along) 

TmPostS <- TmsStd %>% filter(OvSeaRank <= 4 & WSWin == "Y" & yearID > 1970) %>% select(yearID, teamIDBR, W, L, WLPctg, OvSeaRank) 

Best_Post <- ggplot(data = TmPostS, aes(x = yearID)) + 
    geom_bar() + 
    ggtitle("ABC") + 
    xlab("Year") + ylab("") + 
    facet_grid(OvSeaRank ~ .) + 
    theme_light() 

Best_Post 

facet_grid plot

年ごとに1つだけの観測があります。

table(TmPostS$yearID) 

1971 1972 1973 1974 1975 1976 1977 1978 1979 1981 1982 1983 1984 1986 1988 1989 1990 1991 1992 1993 1995 1996 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
1997 1998 1999 2002 2004 2005 2007 2009 2013 2015 
    1 1 1 1 1 1 1 1 1 1 

したがって、 "OvSeaRank"変数とは独立して1年に1つの行しか存在していなければなりません。

私が間違っている可能性のあるヒントはありますか?

ありがとうございます。

+0

現在、あなたは年と階級の関係をプロットしています。これはあまり有益ではありません。特に、1年に1回しか観察されない場合は特にそうです。何を見せたいかをもっと詳しく説明できますか? – Joe

+0

こんにちはジョー、私は定期的なシーズン中にチャンピオンチームのランクが何であるかを見るために毎年棒線をプロットしたいと思います。 – darh78

+0

グラフ内のすべてのバーは、年月に沿って相互に排他的でなければなりません – darh78

答えて

1

デフォルトでは、geom_barは値ではなく、各年の出現回数をカウントします(常に1です)。 stat="identity"でデフォルトの動作を変更する必要があるため、列の値が使用されます。

ggplot(TmPostS, aes(x = yearID, y=OvSeaRank)) + geom_bar(stat="identity") + 
ggtitle("ABC") + xlab("Year") + ylab("") + facet_grid(OvSeaRank ~ .) + 
theme_light() 

enter image description here

あなたが本当にプロットに十分な変数を持っていないので、ファセットなしで実際に良いでしょう。 facet_grid(OvSeaRank ~ .)を省略すると、次のようになります: geom_lineを使用して、ランクのためにy軸を反転させる程度enter image description here

アイデア 方法は?ジョー・サポートへ

ggplot(TmPostS, aes(x = yearID, y=OvSeaRank)) + geom_line() + geom_point() + 
scale_y_reverse() + ggtitle("ABC") + xlab("Year") + ylab("Rank of champion") + theme_light() 

enter image description here

+0

ヘイジョー、答えに感謝します。料理本のリンクのヒントは、私が欲しいものを見つけました(私の答えを見てください)。 geom_lineを使用するアイデアは、私が視覚化したいものの良い洞察を示しています。 – darh78

+0

ようこそ!場合によっては、いくつかのオプションを試す必要があります。 – Joe

0

おかげで、私はこの質問に見せたかったものを見つけことができます。 Iはstat = "bin"によってstat = "identity"を変更し、この場合にはbindwidth = 1

ggplot(TmPostS, aes(x = yearID)) + geom_bar(stat="bin", binwidth = 1, color = "red", fill = "darkblue") + 
    ggtitle("World Series Champions based on their regular season W-L% overall rank") + xlab("Season") + ylab("") + facet_grid(OvSeaRank ~ .) + 
    theme_bw() + 
    theme(axis.text.y=element_blank(), 
     axis.ticks = element_blank()) 

Wished graph using facets

を定義今やデータフレームがジョーからgeom_lineアイデアを使用して、最後に1884

以降のすべてのMLBのチャンピオンを考慮しました。

ggplot(TmPostS, aes(x = yearID, y=OvSeaRank)) + geom_line(colour = "darkblue") + geom_point(colour = "red") + 
    scale_y_reverse() + ggtitle("World Series Champions based on their regular season W-L% overall rank") + xlab("Year") + ylab("Rank of champion") + theme_light() 

Alternative graph using geom_line

関連する問題