NBA投篮热图

画着玩之投篮热图

  • 本文首发于dspstack.com社区

  • NBA常规赛还剩20多场了,看到国外NBA官网数据分析统计的细致程度真是佩服啊。
    没有对比就没有伤害,深感路漫漫其修远兮。

  • 用matlab简单画个投篮热图,自娱自乐一下吧。
    投篮点暂时用随机数产生,后续结合python爬取NBA球员投篮数据之后,再投影做出实际的投篮热图吧。
    篮球场尺寸参考百度文库。
    file

  • 附matlab代码,如下:

clear all;
clc;close all
%%-------------------
% 投篮点热图及射线
% 投篮点随机数产生,非真实数据。
% ZS ZHANG @ Jinan, Feb 26th, 2019.
%%-------------------
len = 28;
width  = 15;
duan1 = 0.75;
duan2 = 4;
diy = 4.9;
dix = 5.8;
rr = 2;
rr3 = 0.5;
basketry1 = [len/2-1.575,0];
basketry2 = [-len/2+1.575,0];
colordef black
%%边线
plot([-len/2,-len/2+len,-len/2+len,-len/2,-len/2],[-width/2,-width/2,-width/2+width,-width/2+width,-width/2],'w')
hold on
%%中线
plot([0,0],[-width/2,width/2],'w')
hold on
%%中圈
aplha=0:pi/100:2*pi;
r=1.8; x=r*cos(aplha); y=r*sin(aplha);
plot(x,y,'w');
%%端线
plot([len/2-duan2,len/2],[-width/2+duan1,-width/2+duan1],'w')
hold on
plot([len/2-duan2,len/2],[width/2-duan1,width/2-duan1],'w')
hold on
plot([-len/2+duan2,-len/2],[-width/2+duan1,-width/2+duan1],'w')
hold on
plot([-len/2+duan2,-len/2],[width/2-duan1,width/2-duan1],'w')
%%
hold on
ax = len/2-dix;
ay = -diy/2;
plot([ax,ax+dix,ax+dix,ax,ax],[ay,ay,ay+diy,ay+diy,ay],'w')
hold on
ax = -len/2;
ay = -diy/2;
plot([ax,ax+dix,ax+dix,ax,ax],[ay,ay,ay+diy,ay+diy,ay],'w')
%%
aplha=0:pi/100:2*pi;
r=1.75; x=len/2-dix+r*cos(aplha); y=r*sin(aplha);
plot(x,y,'w');
hold on
x=-len/2+dix+r*cos(aplha); y=r*sin(aplha);
plot(x,y,'w');
hold on
%%三分线
aplha = pi/2:pi/100:pi*1.5;r = 6.75;
x = len/2-3.75+r*cos(aplha); y = r*sin(aplha);
plot(x,y,'w');
aplha = 0:pi/100:pi*.5;
x = -len/2+3.75+r*cos(aplha); y = r*sin(aplha);
plot(x,y,'w');
hold on
aplha = 1.5*pi:pi/100:2*pi;
x = -len/2+3.75+r*cos(aplha); y = r*sin(aplha);
plot(x,y,'w');
%%篮筐
plot(basketry1(1),basketry1(2),'w.','MarkerSize',15)
hold on
plot(basketry2(1),basketry2(2),'w.','MarkerSize',15)
%%
axis equal
set(gca,'xtick',[],'ytick',[],'xcolor','w','ycolor','w')
%%内线得分随机
shotrandx = len/2-dix-rr + (2*rr).*rand([40,1]);
shotrandy = -diy/2+(diy).*rand([40 1]);
%%
max_color_value = 20;
jet_color = colormap(jet(max_color_value));
for i = 1:length(shotrandy)
    dd(i) = sqrt((shotrandx(i)-basketry1(1))^2+(shotrandy(i)-basketry1(2))^2);
end
color_index = ceil(1 + ((max_color_value-1)/(max(dd)-min(dd)))*(dd-min(dd)));
for i = 1:length(shotrandy)
    selected_color = jet_color(color_index(i),:);
    plot([shotrandx(i),basketry1(1)], [shotrandy(i),basketry1(2)], '-','color',selected_color);
    hold on
    plot(shotrandx(i),shotrandy(i), 'g.');
    hold on;
end
%%三分线得分随机
% alpha = pi/2:pi/100:pi*1.5
alpha = pi/2 + (pi).*rand([60,1]);r = [6.75-rr3;6.75+rr3];
x = len/2-3.75+r(1)*cos(alpha); y = r(1)*sin(alpha);
for i = 1:length(shotrandy)
    dd(i) = sqrt((x(i)-basketry1(1))^2+(y(i)-basketry1(2))^2);
end
color_index = ceil(1 + ((max_color_value-1)/(max(dd)-min(dd)))*(dd-min(dd)));
for i = 1:length(shotrandy)
    selected_color = jet_color(color_index(i),:);
    plot([x(i),basketry1(1)], [y(i),basketry1(2)], '-','color',selected_color);
    hold on
    plot(x(i),y(i), 'g.');
    hold on;
end
alpha = pi/2 + (pi).*rand([60,1]);r = [6.75-rr3;6.75+rr3];
x = len/2-3.75+r(2)*cos(alpha); y = r(2)*sin(alpha);
for i = 1:length(shotrandy)
    dd(i) = sqrt((x(i)-basketry1(1))^2+(y(i)-basketry1(2))^2);
end
color_index = ceil(1 + ((max_color_value-1)/(max(dd)-min(dd)))*(dd-min(dd)));
for i = 1:length(shotrandy)
    selected_color = jet_color(color_index(i),:);
    plot([x(i),basketry1(1)], [y(i),basketry1(2)], '-','color',selected_color);
    hold on
    plot(x(i),y(i), 'g.');
    hold on;
end
%%

猜你喜欢

转载自blog.csdn.net/weixin_43948644/article/details/87931843
今日推荐