我试图将拍摄的密度绘制在篮球场的图像上;但是,我无法弄清楚如何制作它,因此忽略密度= 0的点。
我目前正在接受以下内容:
我用来执行此操作的代码如下:
## LIBRARIES
library(grid)
library(jpeg)
library(RCurl)
library(ggplot2)
library(gridExtra)
library(viridis)
courtImg.URL = "https://thedatagame.files.wordpress.com/2016/03/nba_court.jpg"
court = rasterGrob(readJPEG(getURLContent(courtImg.URL)),
width=unit(1,"npc"), height=unit(1,"npc"))
ggplot(df, aes(x = df$Baseline, y=df$Side)) +
ylim(0, 100) +
ylab(" ") +
xlim(-50, 50) +
xlab("Baseline") +
annotation_custom(court, -50, 50, 0, 100) +
coord_fixed() +
scale_fill_viridis(option='inferno', end=1) +
stat_density_2d(aes(fill =..density..), geom = "raster", contour=FALSE) +
guides(fill = guide_colorbar(title = "% of Shots Taken"))
我想要的输出如下:
在一天结束时,我只是想制作一个热图版本的拍摄图表。如果有人对我如何以完全不同的方式做到这一点有任何建议,我绝对愿意接受它!
提前致谢!
答案 0 :(得分:0)
问题非常简单:你放在图像上的瓷砖是不透明的,因此它们无法看到球场。减少alpha,你可以看到下面画的光栅和球场。
library(grid)
library(jpeg)
library(RCurl)
library(ggplot2)
library(gridExtra)
library(viridis)
courtImg.URL = "https://thedatagame.files.wordpress.com/2016/03/nba_court.jpg"
court = rasterGrob(readJPEG(getURLContent(courtImg.URL)),
width=unit(1,"npc"), height=unit(1,"npc"))
df <- data.frame(Baseline = rnorm(100, 0, 30), Side = rnorm(100, 50, 25))
ggplot(df, aes(x = df$Baseline, y=df$Side)) +
ylim(0, 100) +
ylab(" ") +
xlim(-50, 50) +
xlab("Baseline") +
annotation_custom(court, -50, 50, 0, 100) +
coord_fixed() +
scale_fill_viridis(option='inferno', end=1) +
stat_density_2d(aes(fill =..density..), geom = "raster", contour=F, alpha = 0.5) +
guides(fill = guide_colorbar(title = "% of Shots Taken"))
由reprex package(v0.2.0)创建于2018-04-14。