大满贯冠军的历史作为一个动画条形图比赛

2020年5月15日

[本文首次发表于上的一个统计网站文章,并慷慨解囊,以188bet app]。(您可以在本网页上的内容报告问题金宝搏网址这里)
要共享R-博客内容?188bet app188bet app 如果你有一个博客,或这里如果你不这样做。

我把gif放在文章的开头已经破坏了它,但是如果你对它是如何制作的感兴趣,请继续阅读!

我在网上看到过这样的图表,所以我想做一个与网球相关的图表,还有什么比从1877年开始使用大满贯冠军更好的呢。

是动画所需的主要包装是gganimate。正如它的名字表明它与ggplot集成,使给定的许多不同的图表动画和过渡变量。

现在载入必需的包

需要(XML)要求(data.table)库(HTTR)要求(dplyr)要求(stringr)要求(GGPLOT2)要求(gganimate)

然后,我们需要得到的数据图表。
维基百科有一篇历史上所有大满贯得主的文章,所以我们可以使用得到readHTMLTable

一旦我们知道那里的表位于HTML我们可以把它变成一个数据表。

桌子上有些扭结,我们得把它去掉。例如,在1977年有两个澳大利亚人开放,所以1977年的进入被分成两排,但只有一年。

然后,我们摆脱什么,是不是一个球员的名字,包括特殊字符。Tjem表熔化,所以我们今后每年和大满贯一个条目。

我们也摆脱了其他的东西,比如1925年之前的所有法国公开赛,因为这项赛事实际上并不是“公开”的,也没有举办世界大战等比赛的例子。

gs公司<-数据表(制表符[[3]])名称性格(未列出(gs[1,])gs<-gs[-1]gs<-bind_行(gs,数据表(Year=”1977”,“澳网”=”维塔斯杰拉炎“))gs<-gs[grep(“[0-9]”,Year)][订单(年)]gs<-melt(gs,识别变量=“年”)gs$赢家<-gsub(“\\(([^]+)\\)”,“”,gs$价值)gs$赢家<-gsub(“[*]”,“”,gs$赢家)gs$赢家<-gsub(“[]]”,“”,gs$优胜者)gs$优胜者<-gsub(“业余时代结束”,“gs$优胜者”)gs$优胜者<-gsub(“开放时代开始”,“gs$优胜者”)gs[,优胜者:=str_trim(优胜者)]gs[,.N,优胜者][订单(-N)]
##赢家Ñ## 1:比赛不创建43 ## 2:
         #171:Marin Cilic 1号
gs<-gs[!(变量==“法网”&Year<1925)]gs[,win:=1]gs<-gs[!grep(“锦标赛|开始|世界|职业|锦标赛|奥罗纳维尔”,赢家)]gs<-gs[赢家!=""]

我们现在需要对每年至少赢得一个大满贯的选手进行连续统计,以便他们在我们的图表中显示正确的总成绩开玩笑功能如下做。

此外,我们还需要将玩家从大多数GS的排名到最少GS的排名,以创建排名变量。

#获取所有年份的列表年度列表<-gs[订单(年)][,唯一(年)]#函数fun计算所有玩家到当前年份的累积gs赢取fun<-函数(年){gs[年份<=年,。(win=和(win),latestWin=最大(年)),(winner)][,年:=年]}创建一个表,其中包含年/玩家gsfull<-lapply(年度列表,乐趣)%>%rbindlist()gsfull<-gsfull[订单(年,-win,-latestWin)]gsfull[,排名:=序号(1,.N),年份]gsfull[,win_标签:=粘贴0(“,win)]

我们现在可以开始绘制数据了。首先使用ggplot创建平铺图。在这种情况下,平铺比绘图更有效,因为当绘图在几年之间转换时,它们以更好的方式滑入位置。

我在这里发现的很多代码堆栈溢出.

ÿ<-1877 SP <-ggplot(gsfull [年> = Y&秩<= 30],AES(X =秩,Y =赢,填充=优胜者))+ geom_tile(AES(Y =赢/ 2,高度=取胜,宽度= 0.95),α-= 0.9)+ theme_bw()+ geom_text(AES(Y = 0,标记= paste0(赢家,”“)),hjust = 1)+ geom_text(AES(Y =取胜,标记=win_label,hjust = 0))+ coord_flip(剪辑= “OFF”,展开= F)+ scale_x_reverse()+引导件(颜色= FALSE,填充= FALSE)+主题(axis.line = element_blank(),axis.text。X = element_blank(),axis.text.y = element_blank(),axis.ticks = element_blank(),axis.title.x = element_blank(),axis.title.y = element_blank(),legend.position =“底部”,panel.background = element_blank(),panel.border = element_blank(),panel.grid.major = element_blank(),panel.grid.minor = element_blank(),panel.grid.major.x = element_line(大小=0.1,颜色= “灰色”),panel.grid.minor.x = element_line(大小= 0.1,颜色= “灰色”),plot.margin =余量(5,5,5,5, “CM”))

随着基本情节的制作,是时候真正的动画了。这里就是gganimate动画开始发挥作用。所需的主要功能是过渡状态这需要一个过渡参数,在我们的例子中,并根据它制作动画。

那里面有一些额外的比特;enter_drift退出收缩治理酒吧如何进入和离开的情节和ease_aes控制杆如何切换左右。还有许多其他选项gganimate动画提供所以这只是表面文章。

P < -  SP + transition_states(年,transition_length = 4,state_length = 2)+ view_follow(fixed_x = TRUE)+实验室(标题= '全垒打题名:{closest_state}')+ enter_drift(y_mod = 10)+ exit_shrink()+ ease_aes( '线性')

最后一次的转换定义使有生气获取对象并将其转换为gif或视频(如果需要),具体取决于所选的渲染器。下面的代码是在这篇文章开始时呈现的图。

持续时间和大小参数由用户传递。这里我想指出,如果你把情节第页它确实会被渲染,但它看起来与animate的输出不同,因此我建议您始终运行使有生气看看实际的最终输出是什么。

动画(P,1200,FPS = 10,宽度= 800,高度= 600,渲染器= gifski_renderer( “gs_chart.gif”))

就是这样!与大多数项目中最棘手的部分是在格式获取数据,我需要它,然后花一些时间与审美选择。问题的关键是,一旦你有你的数据准备好ggplot图gganimate动画提供一个直观的框架来创建外观酷炫的图表。

发表评论对于作者,请按照链接并在其博客上发表评论:上的一个统计网站文章.

188bet app右-bloggers.com网站提供每日电子邮件更新金宝搏网址 关于的新闻和教程金宝搏网址金宝搏网址 和许多其他议题。如果你想找一份R/数据科学的工作,请点击这里.
要共享R-博客内容?188bet app188bet app 如果你有一个博客,或这里如果你不这样做。



如果你走到这一步,为什么不订阅更新从现场?选择您的口味:电子邮件,推特,1188bet app,或Facebook的...

评论被关闭。

搜索R-blo188bet appggers

赞助商

千万不要错过更新!
订阅R-博客188bet app接受
电子邮件与最新的[R帖子。
(您将不会再看到这条消息。)

点击此处关闭(此弹出不会再次出现)