Skip to content

Instantly share code, notes, and snippets.

@hafen
Created September 30, 2015 20:38
Show Gist options
  • Save hafen/3bf3ab4362d4ee8f48a4 to your computer and use it in GitHub Desktop.
Save hafen/3bf3ab4362d4ee8f48a4 to your computer and use it in GitHub Desktop.
Basketball Overlay

Created by Ryan Hafen

library(rbokeh)
url <- 'https://raw.githubusercontent.com/weinfz/nba_shot_value_charts/master/court.png'
p <- figure(width = 600, height = 600 * aspect, padding_factor = 0, 
  xlab = NULL, ylab = NULL) %>%
  ly_image_url(x = -300, y = -20, url = url, w = 600, h = 440, anchor = 'bottom_left') %>%
  ly_points(rnorm(100, 0, 50), rnorm(100, 200, 50), color = 'black')
p
<!DOCTYPE html>
<html>
<head>
<script src="http://cdn.pydata.org/bokeh/release/bokeh-0.10.0.min.js"></script>
<link href="http://cdn.pydata.org/bokeh/release/bokeh-0.10.0.min.css" rel="stylesheet">
</head>
<body>
<div id="415420e9760e738bceaa984eb94fd201" class="plotdiv"></div>
<script type="text/javascript">
Bokeh.$(function() {
var modelid = "f00419cdb4f4b193474c3db1ec0ebf43";
var modeltype = "Plot";
var elementid = "415420e9760e738bceaa984eb94fd201";
Bokeh.logger.info("Realizing plot:");
Bokeh.logger.info(" - modeltype: Plot");
Bokeh.logger.info(" - modelid: f00419cdb4f4b193474c3db1ec0ebf43");
Bokeh.logger.info(" - elementid: 415420e9760e738bceaa984eb94fd201");
var all_models = [{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","attributes":{"title":null,"id":"f00419cdb4f4b193474c3db1ec0ebf43","plot_width":590,"plot_height":469.8442,"x_range":{"type":"Range1d","id":"8ad0ee8a5c786563c2af1290467fe40b"},"y_range":{"type":"Range1d","id":"b36789c57da3c00f62616735462270d6"},"left":[{"type":"LinearAxis","id":"e87e18fe8c898f3b6f47e08934a50ef0"}],"below":[{"type":"LinearAxis","id":"63555ab131404a761003c4391af3ce53"}],"right":[],"above":[],"renderers":[{"type":"GlyphRenderer","id":"6eb15f1fdae698013218da412b7c20ae"},{"type":"GlyphRenderer","id":"908137534b163901852c1d937b91af8d"},{"type":"LinearAxis","id":"63555ab131404a761003c4391af3ce53"},{"type":"Grid","id":"f4458abeae1e1a3d3d7776777bd7780d"},{"type":"LinearAxis","id":"e87e18fe8c898f3b6f47e08934a50ef0"},{"type":"Grid","id":"5e08bb58cd1904ad348fd345930c77c1"}],"tools":[{"type":"PanTool","id":"4aac37d17588cbd1acff389b2e070f26"},{"type":"WheelZoomTool","id":"69abd6485890c2b39756aeca0d25ac0c"},{"type":"BoxZoomTool","id":"673684aa2220ccfb8cee4e49f8054a93"},{"type":"ResizeTool","id":"fd815e6cde410b896e8ea4db45e008de"},{"type":"ResetTool","id":"4cc8441b42e9d67b3f21e587c5b836a2"},{"type":"PreviewSaveTool","id":"d0453551a9492d25829891651e1d8a9f"},{"type":"HelpTool","id":"ba2581c255fa07ae7b351d9d38ff3d77"}],"tool_events":{"type":"ToolEvents","id":"33a79160c817ea2f85ad3b412be8fc98"},"extra_y_ranges":{},"extra_x_ranges":{},"tags":[],"doc":null,"min_border":4,"lod_threshold":null},"subtype":"Figure"},{"type":"PanTool","id":"4aac37d17588cbd1acff389b2e070f26","attributes":{"id":"4aac37d17588cbd1acff389b2e070f26","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"},"dimensions":["width","height"]}},{"type":"ToolEvents","id":"33a79160c817ea2f85ad3b412be8fc98","attributes":{"id":"33a79160c817ea2f85ad3b412be8fc98","tags":[],"doc":null},"geometries":[]},{"type":"WheelZoomTool","id":"69abd6485890c2b39756aeca0d25ac0c","attributes":{"id":"69abd6485890c2b39756aeca0d25ac0c","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"},"dimensions":["width","height"]}},{"type":"BoxZoomTool","id":"673684aa2220ccfb8cee4e49f8054a93","attributes":{"id":"673684aa2220ccfb8cee4e49f8054a93","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"}}},{"type":"ResizeTool","id":"fd815e6cde410b896e8ea4db45e008de","attributes":{"id":"fd815e6cde410b896e8ea4db45e008de","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"}}},{"type":"ResetTool","id":"4cc8441b42e9d67b3f21e587c5b836a2","attributes":{"id":"4cc8441b42e9d67b3f21e587c5b836a2","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"}}},{"type":"PreviewSaveTool","id":"d0453551a9492d25829891651e1d8a9f","attributes":{"id":"d0453551a9492d25829891651e1d8a9f","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"}}},{"type":"HelpTool","id":"ba2581c255fa07ae7b351d9d38ff3d77","attributes":{"id":"ba2581c255fa07ae7b351d9d38ff3d77","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"},"redirect":["http://hafen.github.io/rbokeh"],"help_tooltip":["Click to learn more about rbokeh."]}},{"type":"ColumnDataSource","id":"82e716d15b2caad944347685b655fdec","attributes":{"id":"82e716d15b2caad944347685b655fdec","tags":[],"doc":null,"column_names":["dummy"],"selected":[],"discrete_ranges":{},"cont_ranges":{},"data":{"dummy":[1]}}},{"type":"ImageURL","id":"064488d884c58b516c60ba0f1529c846","attributes":{"id":"064488d884c58b516c60ba0f1529c846","tags":[],"doc":null,"url":{"units":"data","value":"https://raw.githubusercontent.com/weinfz/nba_shot_value_charts/master/court.png"},"w":{"units":"data","value":600},"h":{"units":"data","value":440},"anchor":"bottom_left","angle":{"units":"rad","value":0},"dilate":true,"x":{"units":"data","value":-300},"y":{"units":"data","value":-20}}},{"type":"ImageURL","id":"3b2aff76fb86c5ec6eea96a72502a032","attributes":{"id":"3b2aff76fb86c5ec6eea96a72502a032","tags":[],"doc":null,"url":{"units":"data","value":"https://raw.githubusercontent.com/weinfz/nba_shot_value_charts/master/court.png"},"w":{"units":"data","value":600},"h":{"units":"data","value":440},"anchor":"bottom_left","angle":{"units":"rad","value":0},"dilate":true,"x":{"units":"data","value":-300},"y":{"units":"data","value":-20}}},{"type":"GlyphRenderer","id":"6eb15f1fdae698013218da412b7c20ae","attributes":{"id":"6eb15f1fdae698013218da412b7c20ae","tags":[],"doc":null,"selection_glyph":null,"nonselection_glyph":{"type":"ImageURL","id":"3b2aff76fb86c5ec6eea96a72502a032"},"server_data_source":null,"name":null,"data_source":{"type":"ColumnDataSource","id":"82e716d15b2caad944347685b655fdec"},"glyph":{"type":"ImageURL","id":"064488d884c58b516c60ba0f1529c846"}}},{"type":"ColumnDataSource","id":"b743176adf2a8f7f7e71a8d923a7b5fa","attributes":{"id":"b743176adf2a8f7f7e71a8d923a7b5fa","tags":[],"doc":null,"column_names":["x","y"],"selected":[],"discrete_ranges":{},"cont_ranges":{},"data":{"x":[-5.2543,42.3171,-1.7084,-69.1361,-147.8393,28.8166,31.232,2.3119,36.0555,-67.9834,-27.2662,-46.6722,34.1035,-14.0161,-17.1883,13.6485,-51.1689,15.4494,-69.7313,87.4439,90.3441,-46.6791,25.4051,68.382,41.1204,-54.5971,-27.2345,-91.3353,62.2893,16.247,12.8622,42.8797,-105.6041,-4.2024,8.612,-44.7026,65.9597,-16.2823,71.2837,21.6144,-7.2216,-54.2521,-7.6928,-35.1789,-57.599,4.5773,-51.7594,63.1134,-77.6591,120.1779,-52.0319,-79.7912,-50.3084,45.1006,-48.7639,-18.4422,-34.0299,-14.3308,11.0887,-45.4625,-23.5078,-27.2988,45.3336,5.8661,-28.9475,1.898,-42.487,-2.7426,21.715,-2.8003,-6.3816,-97.6101,21.1017,7.073,-72.2096,51.9377,-20.885,85.01,45.7103,-40.29,85.9468,-73.9527,-2.452,113.4666,40.3343,-23.3633,44.3765,28.1808,-60.3998,-4.6337,-35.9809,73.2234,23.6405,47.5697,15.8954,-1.8573,106.5352,34.8315,64.9924,108.1821],"y":[251.5217,168.6985,243.8799,172.5567,144.1354,205.8911,190.7564,253.0241,176.5499,214.5615,151.5904,258.0246,255.2176,245.9427,162.7299,89.8237,155.9014,186.3126,139.2195,281.928,137.6826,234.5172,131.9239,206.2183,154.3354,295.1517,173.9025,270.124,207.8184,212.8574,215.7899,207.948,207.2315,100.7984,167.2756,211.0972,255.9748,143.5078,189.5484,148.448,265.5159,190.5333,203.1294,222.4723,166.8717,235.1223,183.8545,229.9139,138.5169,216.2612,183.5968,160.377,213.5308,223.311,172.662,286.6279,195.2368,253.4741,180.0657,230.4765,255.785,174.8634,160.7027,267.8053,161.2683,150.608,201.4993,84.5724,256.7733,153.3929,197.0185,227.8938,143.7392,142.817,236.6044,268.2654,111.5477,168.9463,244.9648,256.6038,183.396,228.8372,156.7817,190.2286,226.9197,200.4037,242.0242,217.2535,151.8772,232.7775,226.7885,136.066,202.8021,205.6627,249.0986,204.7843,203.7754,291.6427,183.0721,238.7724]}}},{"type":"Circle","id":"9890699fe59187db9e9b4b047bc65cff","attributes":{"id":"9890699fe59187db9e9b4b047bc65cff","tags":[],"doc":null,"size":{"units":"screen","value":10},"line_color":{"units":"data","value":"black"},"fill_color":{"units":"data","value":"black"},"line_alpha":{"units":"data","value":1},"fill_alpha":{"units":"data","value":0.5},"x":{"units":"data","field":"x"},"y":{"units":"data","field":"y"}}},{"type":"Circle","id":"acd4c7e2ada7ae553f9e745c83dfbb28","attributes":{"id":"acd4c7e2ada7ae553f9e745c83dfbb28","tags":[],"doc":null,"size":{"units":"screen","value":10},"line_color":{"units":"data","value":"#e1e1e1"},"fill_color":{"units":"data","value":"#e1e1e1"},"line_alpha":{"units":"data","value":1},"fill_alpha":{"units":"data","value":0.5},"x":{"units":"data","field":"x"},"y":{"units":"data","field":"y"}}},{"type":"GlyphRenderer","id":"908137534b163901852c1d937b91af8d","attributes":{"id":"908137534b163901852c1d937b91af8d","tags":[],"doc":null,"selection_glyph":null,"nonselection_glyph":{"type":"Circle","id":"acd4c7e2ada7ae553f9e745c83dfbb28"},"server_data_source":null,"name":null,"data_source":{"type":"ColumnDataSource","id":"b743176adf2a8f7f7e71a8d923a7b5fa"},"glyph":{"type":"Circle","id":"9890699fe59187db9e9b4b047bc65cff"}}},{"type":"Range1d","id":"8ad0ee8a5c786563c2af1290467fe40b","attributes":{"id":"8ad0ee8a5c786563c2af1290467fe40b","tags":[],"doc":null,"start":-300,"end":300}},{"type":"Range1d","id":"b36789c57da3c00f62616735462270d6","attributes":{"id":"b36789c57da3c00f62616735462270d6","tags":[],"doc":null,"start":-20,"end":420}},{"type":"LinearAxis","id":"63555ab131404a761003c4391af3ce53","attributes":{"id":"63555ab131404a761003c4391af3ce53","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"},"axis_label":"","formatter":{"type":"BasicTickFormatter","id":"10c305425552514df1ceca40e2cefb2d"},"ticker":{"type":"BasicTicker","id":"1b91c9dc297946bcdbb5729e4dd8a456"},"visible":true,"axis_label_text_font_size":"12pt"}},{"type":"BasicTickFormatter","id":"10c305425552514df1ceca40e2cefb2d","attributes":{"id":"10c305425552514df1ceca40e2cefb2d","tags":[],"doc":null}},{"type":"BasicTicker","id":"1b91c9dc297946bcdbb5729e4dd8a456","attributes":{"id":"1b91c9dc297946bcdbb5729e4dd8a456","tags":[],"doc":null,"num_minor_ticks":5}},{"type":"Grid","id":"f4458abeae1e1a3d3d7776777bd7780d","attributes":{"id":"f4458abeae1e1a3d3d7776777bd7780d","tags":[],"doc":null,"dimension":0,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"},"ticker":{"type":"BasicTicker","id":"1b91c9dc297946bcdbb5729e4dd8a456"}}},{"type":"LinearAxis","id":"e87e18fe8c898f3b6f47e08934a50ef0","attributes":{"id":"e87e18fe8c898f3b6f47e08934a50ef0","tags":[],"doc":null,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"},"axis_label":"","formatter":{"type":"BasicTickFormatter","id":"fab220b83e2fff539c75a060e0a4b5b4"},"ticker":{"type":"BasicTicker","id":"08abc22e428895a955a1e1fbb53fa9c6"},"visible":true,"axis_label_text_font_size":"12pt"}},{"type":"BasicTickFormatter","id":"fab220b83e2fff539c75a060e0a4b5b4","attributes":{"id":"fab220b83e2fff539c75a060e0a4b5b4","tags":[],"doc":null}},{"type":"BasicTicker","id":"08abc22e428895a955a1e1fbb53fa9c6","attributes":{"id":"08abc22e428895a955a1e1fbb53fa9c6","tags":[],"doc":null,"num_minor_ticks":5}},{"type":"Grid","id":"5e08bb58cd1904ad348fd345930c77c1","attributes":{"id":"5e08bb58cd1904ad348fd345930c77c1","tags":[],"doc":null,"dimension":1,"plot":{"type":"Plot","id":"f00419cdb4f4b193474c3db1ec0ebf43","subtype":"Figure"},"ticker":{"type":"BasicTicker","id":"08abc22e428895a955a1e1fbb53fa9c6"}}}];
Bokeh.load_models(all_models);
var model = Bokeh.Collections(modeltype).get(modelid);
var view = new model.default_view({model: model, el: '#415420e9760e738bceaa984eb94fd201'});
Bokeh.index[modelid] = view;
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment