所以,我发现this code关于如何将变量映射到六角形大小,并尝试修改它,以便我可以将它用于绘制篮球拍摄图表的目的。我知道还有其他一些帖子,如this one,但我过去读过的都没有回答我的问题。第一个确实有帮助,但我遇到了一个小问题:
假设我有一个数据框,其中包含4个变量,x,y,值(镜头所具有的点数;在篮球中它是2或3个,取决于距离篮子有多远)在250次观察中,拍摄结果(结果为1次,投篮次数为0次)。使用x和y坐标,值和结果进行250次拍摄。
示例:
x y value outcome
1 169.7650 -316.5726 3 0
2 75.0775 -182.3126 2 0
3 94.0150 -147.4050 2 1
4 109.1650 -138.0068 2 0
5 87.7025 -146.0624 2 1
# dput below:
structure(list(x = c(169.765, 75.0775, 94.015, 109.165, 87.7025),
y = c(-316.5726, -182.3126, -147.405, -138.0068, -146.0624),
value = c(3L, 2L, 2L, 2L, 2L), outcome = c(0L, 0L, 1L, 0L, 1L)),
.Names = c("x", "y", "value", "outcome"), class = "data.frame", row.names = c(NA, -5L))
负坐标因为(0/0)位于左上角。使用我上面链接的第一个线程的代码,我能够存储我的数据,我只是无法弄清楚如何对binned数据进行操作。这是我到目前为止所得到的:
从这段代码:
# devtools::install_git("https://github.com/hadley/densityvis.git")
library(densityvis)
bin = hex_bin(df$x, df$y, var4=df$value, frequency.to.area=TRUE)
hexes = hex_coord_df(x=bin$x, y=bin$y,
width=attr(bin,"width"), height=attr(bin,"height"),
size=bin$size)
hexes$rightness = rep(bin$col, each=6)
ggplot(hexes, aes(x=x, y=y)) + geom_polygon(aes(fill=rightness, group=id))
大小显示从给定区域拍摄的拍摄数量。颜色给出该区域拍摄的值。我想要的是每次射击点数,意思是:将每个点的点数相加,然后除以所拍摄的数量,范围从0(不拍摄)到3(所有照片都是从3点区域拍摄)并显示只有至少两次射击的箱子才能开始。
我知道要问很多,而且我的问题是我不能自己做。但如果有人有时间,任何帮助都会非常感激。
修改: 我上传了创建上图here的csv示例。 我不知道将300行代码发布到问题中是否很酷,这就是我将geotheory的代码here链接起来的原因。我稍微修改过的示例位于上面的代码括号中,我刚刚运行了
df <- read.csv("sample_data.csv", header=TRUE)
预先。
答案 0 :(得分:3)
当hex_bin代码代表零值时,观察结果被过滤掉。这可以通过从& var4 > 0
(github中的第117行)中删除clean_xy
参数来更改。然后是以下内容:
df$pts = 0
for(i in 1:nrow(df)) if(df$outcome[i] == 1) df$pts[i] = df$value[i]
bin = hex_bin(df$x, df$y, var4=df$pts, frequency.to.area=TRUE)
hexes = hex_coord_df(x=bin$x, y=bin$y, width=attr(bin,"width"), height=attr(bin,"height"), size=bin$size)
hexes$points = rep(bin$col, each=6)
ggplot(hexes, aes(x=x, y=y)) + geom_polygon(aes(fill=points, group=id))
给你:
这就是你要找的东西吗?