Below is code and a dataset of a stat_density_2d plot I created in R.
library(ggplot2)
topKzone <- 3.5
botKzone <- 1.6
inKzone <- -0.95
outKzone <- 0.95
kZone <- data.frame(
x=c(inKzone, inKzone, outKzone, outKzone, inKzone),
y=c(botKzone, topKzone, topKzone, botKzone, botKzone)
)
df$h <- round(df$platelocheight)
df$s <- round(df$platelocside)
df$es<- round(df$exitspeed)
ggplot(kZone, aes(x,y)) +
stat_density_2d(data=df, aes(x=s, y=h),geom="polygon") +
scale_fill_distiller(palette = "Spectral") +
geom_path(lwd=1.5, col="black") +
coord_fixed()
Data:
structure(list(platelocheight = c(2.594, 3.803, 3.254, 3.599,
3.617, 3.297, 2.093, 3.611, 2.842, 3.316, 2.872, 3.228, 3.633,
4.28, 3.309, 2.8, 2.632, 3.754, 2.207, 3.604, 3.443, 2.188, 3.452,
2.553, 3.382, 3.067, 2.986, 2.785, 2.567, 3.804), platelocside = c(0.059,
-1.596, -0.65, -0.782, -0.301, -0.104, 0.057, -0.807, 0.003,
1.661, 0.088, -0.32, -1.115, -0.146, -0.364, -0.952, 0.254, 0.109,
-0.671, -0.803, -0.212, -0.069, -0.09, -0.472, 0.434, 0.337,
0.723, 0.508, -0.197, -0.635), exitspeed = c(69.891, 73.352,
83.942, 85.67, 79.454, 85.277, 81.078, 73.573, 77.272, 59.263,
97.343, 91.436, 76.264, 83.479, 47.576, 84.13, 60.475, 61.093,
84.54, 69.959, 88.729, 88.019, 82.18, 83.684, 86.296, 90.605,
79.945, 59.899, 62.522, 77.75)), .Names = c("platelocheight",
"platelocside", "exitspeed"), row.names = c(NA, 30L), class = "data.frame")
The code successfully runs, however, I would like to add a third fill variable (exitspeed) to make it look more like a heat map. I have tried adding 'fill=es' to the stat_density_2d line, but the code either ignores the 'fill=es' line or says it cannot find the variable es.
Below are pictures of what my code is plotting now and what I want the plot to look like.
Current Code:
What I Want:
Note: I would still like to have a scale on the right-hand side of the graph.
Does anyone know how to properly add a third variable to a stat_density_2d plot? I am also open to using other plots/packages to construct this heat map. Thanks in advance!
There are two problems with your graph:
- First, the different scales (units) as commented. This makes it not possible to simply create a second
stat_density
for exitspeed as I have suggested in the comment. Also, fill = ..density.. won't work in this case because we are talking about a different variable.- Second, the coarse x/y values (see below).
The problem with the coarse x/y coordinates is, the interpolation is not very smooth. One could change the interpolation parameters, but I don't know how to do this (yet). @JasonAizkalns asked in this question in this direction - but unfortunately there is no answer yet.
More granular x/y coordinates would definitely help though. So why not predict them semi-manually.
What you basically want, is to assign an exit speed value to each x/y coordinate - within your density contour plot ! (Although I personally think it probably doesn't make real sense, because those things are not necessarily related.)
Now - in the following I will predict a value for randomly sampled x/y within (!) the largest polygon of your density contours from your original plot. Let's see: