所以,我找到了this code不久前关于如何将变量映射到六边形大小并尝试对其进行修改,以便我可以将其用于绘制篮球投篮图表的目的。我知道还有一些其他线程,例如 this one ,但我过去读过的都没有回答我的问题。第一个确实有帮助,但我遇到了一个小问题:
假设我有一个包含 4 个变量的数据框,x、y、值(投篮得分;在篮球中为 2 或 3,具体取决于投篮距离篮筐的距离)和结果( 1 表示投中,0 表示投篮未命中),基于 250 个观察。 250 个镜头,带有 x 和 y 坐标、值和结果。
示例:
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) 位于左上角。通过上面链接的第一个线程的代码,我能够对数据进行装箱,我只是不知道如何对装箱数据进行操作。这是我到目前为止得到的:
从此代码:
# 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))
尺寸显示从给定区域拍摄了多少张照片。颜色给出了来自该区域的镜头的值(value)。我想要的是类似每次投篮得分的东西,意思是:将每个箱的得分相加,然后除以投篮次数,范围从 0(没有投篮)到 3(所有投篮都是从 3 分区域投篮)并显示仅包含至少两次拍摄的垃圾箱。
我知道要问的事情很多,而且我自己做不到是我的问题。但如果有人有时间,任何帮助将不胜感激。
编辑: 我上传了创建上述图像的 csv 示例 here 。 我不知道在一个问题中发布 300 行代码是否很酷,这就是为什么我链接 geotheory的代码 here 。我稍微修改过的示例在上面的代码括号中,我刚刚运行
df <- read.csv("sample_data.csv", header=TRUE)
事先。
最佳答案
根据 hex_bin 代码,零值观测值被过滤掉。这可以通过从 clean_xy
中删除 & var4 > 0
参数来更改(github 中的第 117 行)。然后是以下内容:
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))
给你:
这就是你要找的吗?
关于r - 使用 hex_bin 将变量映射到六边形大小和颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337336/