r - 使用 hex_bin 将变量映射到六边形大小和颜色

标签 r ggplot2 binning

所以,我找到了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) 位于左上角。通过上面链接的第一个线程的代码,我能够对数据进行装箱,我只是不知道如何对装箱数据进行操作。这是我到目前为止得到的:

Imgur-Link

从此代码:

# 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))

给你:

enter image description here

这就是你要找的吗?

关于r - 使用 hex_bin 将变量映射到六边形大小和颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26337336/

相关文章:

R软件-结合表格和向量制作表格

r - 将 R 中稀疏矩阵的对角线清零的内存有效方法

python - 减少大型分类变量的级别数

matlab - 在 matlab 中更改电影尺寸

r - 为什么 file.exists(tempfile()) 返回 FALSE?

r - 一种不太敏感的序列化方法

r - 在ggplot中绘制两个图表

r - 这是什么类型的图表?它可以使用ggplot2创建吗?

r - ggplot2绘图数据: Error in xy.坐标 'x'和 'y'长度不同

r - 如果数据点数量较少,ggplot2 如何使用 cut_number 拆分组?