首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >有意思的数据可视化案例:R语言ggplot2画山脊图展示NBA球员出手距离的分布

有意思的数据可视化案例:R语言ggplot2画山脊图展示NBA球员出手距离的分布

作者头像
用户7010445
发布2021-02-05 14:49:01
发布2021-02-05 14:49:01
1K0
举报

很早之前就发现了这个有意思的案例,这几天又把它重新翻了出来再重复一遍,看有没有新的收获。

原文链接是

https://nycdatascience.com/blog/student-works/nba-shot-log/

主要内容是探索了NBA 14/15赛季常规赛MVP排行榜前四名 库里 哈登 詹姆斯 威少的投篮数据。今天重复第一个内容:用R语言的ggplot2画山脊图展示以上四人的投篮出手距离的分布。

原始数据集下载自kaggle

https://www.kaggle.com/dansbecker/nba-shot-logs

对原始数据集进行清洗的代码 https://github.com/nycdatasci/bootcamp007_project/tree/master/Project1-ExploreVis/Xinyuan_Wu

这部分代码我们就不关注了,直接运行得到作图的数据 数据清洗的代码我已经运行好了,需要本文的示例数据可以直接留言

首先读入清洗好的数据
代码语言:javascript
复制
df<-read.csv("NBA_MVP-1.tsv",header=T,sep="\t")

这边遇到一个问题是:如果用read.table()函数读入数据read.table("NBA_MVP-1.tsv",header=T,sep="\t")就会报错Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 145 did not have 21 elements这个是什么原因呢?暂时还没有搞懂

完整的作图代码
代码语言:javascript
复制
library(ggplot2)
library(ggthemes)
ggplot(data=df,aes(x=dist_cut))+
  geom_density(aes(fill=player_name))+
  facet_grid(player_name~.)+
  theme_gdocs()+
  theme(axis.text.y = element_blank())+
  labs(x="Shot Distance",y="Shot Density")+
  ggtitle("Shot Distance")+
  scale_fill_manual("Players", 
                    values = c("#FFCC33", "#FF3300", "#990000", "#0066FF"))

最终结果

image.png

解释代码
代码语言:javascript
复制
library(ggplot2)
library(ggthemes)

加载用到的包

  • ggplot2用来作图
  • ggthemes用来补充一些ggplot2的主题

最基本的密度图

代码语言:javascript
复制
ggplot(data=df,aes(x=dist_cut))+
  geom_density(aes(fill=player_name))

根据运动员的名字分面

代码语言:javascript
复制
ggplot(data=df,aes(x=dist_cut))+
  geom_density(aes(fill=player_name))+
  facet_grid(player_name~.)

设置一个作图的主题

代码语言:javascript
复制
ggplot(data=df,aes(x=dist_cut))+
  geom_density(aes(fill=player_name))+
  facet_grid(player_name~.)+
  theme_gdocs()

去掉y轴的刻度标签

代码语言:javascript
复制
ggplot(data=df,aes(x=dist_cut))+
  geom_density(aes(fill=player_name))+
  facet_grid(player_name~.)+
  theme_gdocs()+
  theme(axis.text.y = element_blank())

更改坐标轴的标题

代码语言:javascript
复制
ggplot(data=df,aes(x=dist_cut))+
  geom_density(aes(fill=player_name))+
  facet_grid(player_name~.)+
  theme_gdocs()+
  theme(axis.text.y = element_blank())+
  labs(x="Shot Distance",y="Shot Density")

给整幅图添加一个标题

代码语言:javascript
复制
ggplot(data=df,aes(x=dist_cut))+
  geom_density(aes(fill=player_name))+
  facet_grid(player_name~.)+
  theme_gdocs()+
  theme(axis.text.y = element_blank())+
  labs(x="Shot Distance",y="Shot Density")+
  ggtitle("Shot Distance")

自定义填充的颜色并且更改图例的标题

代码语言:javascript
复制
ggplot(data=df,aes(x=dist_cut))+
  geom_density(aes(fill=player_name))+
  facet_grid(player_name~.)+
  theme_gdocs()+
  theme(axis.text.y = element_blank())+
  labs(x="Shot Distance",y="Shot Density")+
  ggtitle("Shot Distance")+
  scale_fill_manual("Players", 
                    values = c("#FFCC33", "#FF3300", "#990000", "#0066FF"))

大家可以自己从最基本的密度图然后逐步向上叠加代码看看效果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原文链接是
  • 首先读入清洗好的数据
  • 完整的作图代码
  • 解释代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档