2016-10-28 3 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

년 당 하나의 관찰이있다.

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"변수와 별도로 연간 한 줄만 존재해야합니다.

내가 잘못하고있는 것의 암시?

미리 감사드립니다.

+0

지금은 연대와 계급 간의 관계 만 계획하고 있습니다. 이것은 매우 유익하지 못하며, 특히 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 ~ .)를 제공 밖으로 떠나 : enter image description here

아이디어 geom_line를 사용하여 순위에 대한 y 축 반전에 대한 어떻게?

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

감사합니다, 나는이 질문에 표시 할 원하는 것을 찾을 수 있습니다. 나는 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