ggplot 中的方面在变量图中放置错误的观察值
facets in ggplot placing wrong observations in variables plots
我正在尝试使用从 Lahman 包中提取的简单 data.frame ggplot2 的 Facets 功能绘制图表。
然而,它将一些观察结果放在了错误的变量图中。
我尝试在 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" 变量无关。
有什么我可能做错的提示吗?
提前致谢。
默认情况下 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()
其实不分面更好,因为你在情节中没有足够的变量。省略 facet_grid(OvSeaRank ~ .)
给出以下结果:
想法
如何使用 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()
感谢 Joe 的支持,我可以找到我想在这个问题上展示的内容。
我正在通过 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
在这种情况下,现在数据框考虑了自 1884 年以来的所有 MLB 冠军。
最后,使用 Joe 的 geom_line 想法:
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
我正在尝试使用从 Lahman 包中提取的简单 data.frame ggplot2 的 Facets 功能绘制图表。 然而,它将一些观察结果放在了错误的变量图中。 我尝试在 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" 变量无关。
有什么我可能做错的提示吗?
提前致谢。
默认情况下 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()
其实不分面更好,因为你在情节中没有足够的变量。省略 facet_grid(OvSeaRank ~ .)
给出以下结果:
想法
如何使用 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()
感谢 Joe 的支持,我可以找到我想在这个问题上展示的内容。
我正在通过 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
在这种情况下,现在数据框考虑了自 1884 年以来的所有 MLB 冠军。
最后,使用 Joe 的 geom_line 想法:
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