2013-02-12 25 views
18

Tôi hy vọng sẽ xây dựng một số biểu đồ để hiển thị xu hướng/hiệu quả chụp của một số cầu thủ và đội NBA. Tôi muốn định dạng hình lục giác như sau: kích thước sẽ đại diện cho số lượng ảnh và màu sắc sẽ biểu thị hiệu quả tương đối (pts/try) từ vị trí đó. Here is a great example những gì tôi đang tìm kiếm, tạo ra bởi Kirk Goldsberry:Sử dụng cả thuộc tính màu sắc và kích thước trong Hexagon Binning (ggplot2)

Ray Allen, by Kirk Goldsberry

tôi đã có thể sử dụng hexbinshexTapply để đạt được một cái gì đó gần với kết quả mong muốn, nhưng hình dạng là hình tròn. Đây là mã của tôi (trong đó bao gồm dữ liệu mẫu):

library(hexbin); library(ggplot2) 
df <- read.table(text="xCoord yCoord pts 
11.4  14.9  2 
2.6  1.1  0 
4.8  4.1  2 
-14.4 8.2  2 
4.2  0.3  0 
0.4  0.0  2 
-23.2 -1.1  3", header=TRUE) 
h <- hexbin (x=df$xCoord, y = df$yCoord, IDs = TRUE, xbins=50) 
pts.binned <- hexTapply (h, df$pts, FUN=mean) 

df.binned <- data.frame (xCoord = [email protected], 
      yCoord = [email protected], FGA = [email protected], pts = pts.binned) 

chart.player <- ggplot (df.binned, aes (x =xCoord , 
        y =yCoord , col = pts, size = FGA)) + coord_fixed() + 
geom_point() + scale_colour_gradient("Points/Attempt", low = "green", high="red") 

Một cách khác để suy nghĩ về nó sẽ được tô đầy lên cái hình lục giác trong plot(h, style="lattice") bởi pts/nỗ lực - nhưng tôi không chắc chắn làm thế nào để làm điều đó, một trong hai .

Có cách nào để lấy biểu đồ này với hình lục giác thay vì hình tròn không?

+0

Chỉ cần tôi tò mò. ý nghĩa của các tọa độ âm ở đây là gì? Điểm được tính trong giỏ ngay cả khi bạn bắn ra ngoài mặt đất? – agstudy

+0

Tôi nghĩ vị trí của giỏ là c (0,0). –

+0

Đó chính xác là DWin. Các tọa độ được tính bằng feet và có liên quan đến rổ tại 0,0. Vì vậy, ảnh chụp tại (-23.2, -1.1) sẽ là một góc trái 3 con trỏ là 23,2 feet bên trái của vòng và gần như một chân phía sau trung tâm của vòng. Lưu ý rằng vòng là 5,25 feet so với đường cơ sở, vì vậy ảnh này vẫn còn trong trường chơi. Cảm ơn bạn đã chỉnh sửa DWin – Wynnerbago

Trả lời

9

Cảm ơn bạn lần đầu tiên về câu hỏi này và để chia sẻ cốt truyện này với trí tưởng tượng tuyệt vời!

Đây là nỗ lực sử dụng gói lattice. Chủ yếu là tôi thực hiện ý tưởng của bạn: tô màu hình lục giác trong âm mưu (h, style = "mạng") bởi pts/try ". Việc sử dụng mạng cũng được thúc đẩy bởi thực tế là bạn có thể sử dụng chức năng grid trong các chức năng bảng mạng (vẽ chi tiết mặt đất chẳng hạn)

tôi tạo ra một số dữ liệu

dat <- data.frame(
    xCoord = round(runif(1000,-30,30),2), 
    yCoord = round(runif(1000,-2,30),2), 
    pts = sample(c(0,2,3),100,rep=T)) 
#dat$pts[dat$xCoord <0 & dat$yCoord] <- 3 

đây cốt truyện:

xyplot(yCoord~xCoord,data =dat , panel = function(x,y,...) 
    { 
    hbin<-hexbin(dat$xCoord,dat$yCoord,xbins=50,IDs=TRUE) 
    mtrans<-hexTapply(hbin,dat$pts,sum,na.rm=TRUE) 
    cols <- rainbow(4,alpha=0.5) 
    grid.hexagons(hbin, style='lattice', 
        ,minarea=0.5,maxarea=5,colorcut=c(0,.6,1), 
        border=NA, 
        pen=cols[mtrans+1]) 
    ## Now you can get fun to draw the ground here 
    ## something like... 
    ## grid.circle(gp=gpar(fill=NA)) 
    }) 

enter image description here

EDIT Sử dụng OP thực data. Tôi nhận được cốt truyện này. Bạn cần chơi với minarea và `` maxarea argument to define overlapping regions. I add also an image as abckground using lưới.raster`. Tôi không có kỹ năng cốt truyện vì vậy tôi chọn một từ anh ấy net, nhưng bạn có thể sử dụng kỹ thuật này để thêm một mặt đất. Tôi chắc chắn bạn có thể làm một hình ảnh tốt hơn.

library(lattice) 
library(hexbin) 
library(png) 
xyplot(locationY~locationX,data =dat , panel = function(x,y,...) 
{ 
    ## imgae bakground 
    m <- readPNG('basket.png') 
    rimg <- as.raster(m) 
    grid.raster(rimg, x=0, y=61.5, just="top", width=50, 
       default.units = "native") 
    panel.fill(col=rgb(1,1,1,alpha=0.8)) 

    hbin<-hexbin(dat$locationX,dat$locationY,xbins=50,IDs=TRUE) 
    mtrans<-hexTapply(hbin,dat$Points,sum,na.rm=TRUE) 
    cols <- rainbow(4) 
    grid.hexagons(hbin, style='lattice', 
        ,minarea=0.1,maxarea=50,colorcut=c(0,.6,1), 
        border=NA, 
        pen=cols[mtrans+1]) 
}) 

enter image description here

+0

Cảm ơn agstudy! Tôi sẽ cố gắng này ra ngày hôm nay và cho bạn biết làm thế nào nó đi. – Wynnerbago

+0

Tôi đã sử dụng 'geom_path' để vẽ" đường tòa án ". Ví dụ, tôi đã sử dụng đoạn mã sau để vẽ phần cong của đường 3 điểm: 'arcX2 <-seq (chiều dài = 5000, từ = -22, đến = 22) arcY2 <-sqrt (23,75^2-arcX2^2) arc2data <- data.frame (x = arcX2, y = arcY2) arctwo <-geom_path (dữ liệu = arc2data, aes (arcX2, arcY2), color = "gray", size = 1) 'Tôi có thể sử dụng không các hàm 'grid' để làm một cái gì đó tương tự? – Wynnerbago

+0

@Wynnerbago bạn đã thử ít nhất điều này trên dữ liệu thực? cho bình luận thứ hai của bạn, bạn có một cốt truyện ggplot2 và bạn sẽ chuyển đổi nó thành cốt truyện lưới? is'ntit? – agstudy

Các vấn đề liên quan