【发布时间】:2014-10-13 10:02:31
【问题描述】:
所以,我不久前找到了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))
尺寸显示从给定区域拍摄了多少张照片。颜色给出了来自该区域的镜头的价值。我想要的是每张照片的点数,意思是:将每个箱子的点数相加,然后除以拍摄的照片数量,范围从 0(没有拍摄)到 3(所有拍摄都来自 3 点区域)并显示只有至少有两次拍摄的垃圾箱。
我知道有很多问题要问,我的问题是我自己做不到。但如果有人有时间,任何帮助将不胜感激。
编辑: 我上传了创建上述图像here 的csv 样本。 我不知道将 300 行代码发布到一个问题中是否很酷,这就是我链接geotheory 的代码here 的原因。我稍微修改的例子在上面的代码括号中,我只是跑了
df <- read.csv("sample_data.csv", header=TRUE)
事先。
【问题讨论】:
-
如果你能为每个坐标制作一个小饼图不是很好吗?大小对应于拍摄的照片数量,馅饼的大小对应于每个位置 2/3 点的比例。
-
这是一个有趣的想法,谢谢!尽管我认为这可能太多了,因为您必须单独研究每个箱子才能了解玩家 X 如何从该点 Y 射击,而按效率着色的六边形(每次射击的点数)可以让您更好地总体了解从那个球员感觉最舒服的位置投篮,不是吗?
-
@roman_luštrik 查看
ggsubplot包 -
@geotheory uff,那个包需要做很多工作。 :)
-
它可能看起来很简单,但实际上我发现它非常简单,例如在地图上叠加图表。只需寻找一个最小的例子。