I am generating a 3D Kernal Density Plot of Steph Curry’s shooting data using the following code:

library(rjson)

library(jsonlite)

library(RCurl)

content = getURLContent(url, verbose = TRUE, useragent = getOption(“HTTPUserAgent”))

shot.data <- fromJSON( txt = content )

steph_curry <- as.data.frame(shot.data$resultSets$rowSet[[1]], stringsAsFactors = FALSE )

colnames(steph_curry) <- shot.data$resultSets$headers[[1]]

library(plotly)

library(MASS)

steph_curry$LOC_X = as.numeric(steph_curry$LOC_X)

steph_curry$LOC_Y = as.numeric(steph_curry$LOC_Y)

steph_curry$SHOT_MADE_FLAG = as.numeric(steph_curry$SHOT_MADE_FLAG)

den3d <- kde2d(steph_curry$LOC_X,steph_curry$LOC_Y)

plot_ly(x=den3d$x, y=den3d$y, z=den3d$z) %>% add_surface()

All of the above code works just fine. Next what I am wanting to do is color code the graph based on field goal percentage rather than the z value of the kernal density. I use the following code to generate a dataframe of these field goal percentages by create hexbins of the shooting data where each hexbins’ z value is shooting percentage, and then assigning each x, y pairing in my kernal density the z value of the hexbin that is the minimum cartesian distance away. Again, I am able to successfully do this with the following code:

playermeans = den3d$z

row.names(playermeans) = den3d$x

colnames(playermeans) = den3d$y

a = hexbin(x = steph_curry$LOC_X,y=steph_curry$LOC_Y,IDs = TRUE,xbins = 10)

b = hexTapply(a,steph_curry$SHOT_MADE_FLAG,FUN = mean)

hexmeans=NULL

hexmeans$X = a@xcm

hexmeans = as.data.frame(means)

hexmeans$Y = a@ycm

hexmeans$Z = b

playermeans = as.data.frame(playermeans)

for(i in 1:nrow(playermeans)){

for (j in 1:ncol(playermeans)){

x_coord = as.numeric(rownames(playermeans)[i])

y_coord = as.numeric(colnames(playermeans)[j])

dists <- (x_coord - hexmeans$X)^2 + (y_coord - hexmeans$Y)^2

playermeans[i,j] = hexmeans$Z[dists == min(dists)]

}

}

The only remaining thing to do is assign a color gradient based on the shooting percentages found in the playermeans variable. Assuming it is possible, how do I do this?