2d Kernal Density图,其中在R中忽略具有0密度的点(使用ggplot2)

时间:2018-04-13 19:59:55

标签: r ggplot2 kernel-density density-plot

我试图将拍摄的密度绘制在篮球场的图像上;但是,我无法弄清楚如何制作它,因此忽略密度= 0的点。

我目前正在接受以下内容:

Bad_Court

我用来执行此操作的代码如下:

## 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"))

我想要的输出如下:

Good_Court

在一天结束时,我只是想制作一个热图版本的拍摄图表。如果有人对我如何以完全不同的方式做到这一点有任何建议,我绝对愿意接受它!

提前致谢!

1 个答案:

答案 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。