2-й график плотности ядра, где точки с плотностью 0 игнорируются (с использованием ggplot2) в R

Я пытаюсь изобразить плотность кадров на изображении баскетбольной площадки; однако я не могу понять, как сделать так, чтобы точки, где плотность = 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"))

Мой желаемый результат выглядит примерно так:

Хороший_Суд

В конце концов, я просто пытаюсь сделать версию диаграммы выстрелов в виде тепловой карты. Если у кого-то есть какие-либо предложения относительно того, как я могу сделать это совершенно другим способом, который работает, я абсолютно открыт для этого!

Заранее спасибо!


person klassic123    schedule 13.04.2018    source источник


Ответы (1)


Проблема очень проста: плитки, которые вы размещаете поверх изображения, непрозрачны, поэтому из-за них невозможно увидеть корт. Уменьшите альфу, и вы сможете увидеть и растр, и корт, нарисованные ниже.

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

Создано 14 апреля 2018 г. с помощью пакета reprex (v0.2.0).

person camille    schedule 15.04.2018