ggplot中的方面在变量图中放置错误的观察结果

时间:2016-10-28 19:34:57

标签: r ggplot2 geom-bar facets

我正在尝试使用ggplot2中的Facets功能从一个从Lahman包中提取的简单data.frame绘制图形。 然而,它正在将一些观察结果放在错误的变量图中。 我试图在facet_grid参数中使用几个配置,但所有配置都有错误的观察位置。

下面是重现情节的代码。

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”变量。

任何我可能做错的提示?

提前致谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

感谢Joe的支持,我可以找到我想在这个问题上展示的内容。 我正在Private Sub engineVievport_Paint(sender As Object, e As PaintEventArgs) 'Clear Buffers GL.Clear(ClearBufferMask.ColorBufferBit) GL.Clear(ClearBufferMask.DepthBufferBit) 'all GL stuff here ' engineViewport.SwapBuffers() End Sub 修改stat = "identity"并定义stat = "bin"

bindwidth = 1

Wished graph using facets

在这种情况下,现在数据框架考虑了自1884年以来的所有MLB冠军。

最后,使用Joe的geom_line创意:

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

Alternative graph using geom_line