{"action":"created","issue":{"url":"https://api.github.com/repos/bokeh/bokeh/issues/2720","labels_url":"https://api.github.com/repos/bokeh/bokeh/issues/2720/labels{/name}","comments_url":"https://api.github.com/repos/bokeh/bokeh/issues/2720/comments","events_url":"https://api.github.com/repos/bokeh/bokeh/issues/2720/events","html_url":"https://github.com/bokeh/bokeh/pull/2720","id":101042594,"number":2720,"title":"Refactor Charts for Table-like (x,y) Inputs","user":{"login":"rothnic","id":452052,"avatar_url":"https://avatars.githubusercontent.com/u/452052?v=3","gravatar_id":"","url":"https://api.github.com/users/rothnic","html_url":"https://github.com/rothnic","followers_url":"https://api.github.com/users/rothnic/followers","following_url":"https://api.github.com/users/rothnic/following{/other_user}","gists_url":"https://api.github.com/users/rothnic/gists{/gist_id}","starred_url":"https://api.github.com/users/rothnic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rothnic/subscriptions","organizations_url":"https://api.github.com/users/rothnic/orgs","repos_url":"https://api.github.com/users/rothnic/repos","events_url":"https://api.github.com/users/rothnic/events{/privacy}","received_events_url":"https://api.github.com/users/rothnic/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/bokeh/bokeh/labels/status:%20WIP","name":"status: WIP","color":"fef2c0"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":9,"created_at":"2015-08-14T16:00:52Z","updated_at":"2015-08-24T09:44:20Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/bokeh/bokeh/pulls/2720","html_url":"https://github.com/bokeh/bokeh/pull/2720","diff_url":"https://github.com/bokeh/bokeh/pull/2720.diff","patch_url":"https://github.com/bokeh/bokeh/pull/2720.patch"},"body":"This utilizes the existing builder/chart structure, but pretty much replaces the guts of it.\r\n\r\n**Summary of approach:**\r\n* Replaces DataAdapter with ChartDataSource, which wraps the pandas dataframe\r\n* Converts multiple input types into pandas dataframe\r\n* Building the glyphs is built around a modified pandas groupby process, which yields DataGroups, which will roughly correspond to one composite glyph where that makes sense. The DataGroup is a subset of data, with the attributes that are assigned to it.\r\n* Includes method for describing the attributes (color, marker, etc.) in a way that users can easily modify\r\n* Builders specify their dimensions (default=(x,y)), so there is opportunity to support charts with something other than x,y\r\n* In general, Builders will work at the entire DataFrame level, and custom glyph behaviors, calculations, etc will be factored out into a very simple and deterministic creation of a composite glyph with more simple data types (array-like data, single attribute (one color, one marker, etc.)).\r\n\r\n**Background**\r\n* For a detailed walkthrough of the experimentation that went into this approach see [this notebook](http://nbviewer.ipython.org/gist/rothnic/a6424b0179bd9b29405b/assign_attrs.ipynb).\r\n* For the research that went into the API, see [the bokeh days wiki page](https://github.com/bokeh/bokeh/wiki/Bokeh-Days-Working-Document).\r\n* For the issue associated with the API update, see bokeh/bokeh#2442.\r\n\r\nOnce complete, this will close bokeh/bokeh#2442. Currently, this is very much still in work, but things should go more quickly from here."},"comment":{"url":"https://api.github.com/repos/bokeh/bokeh/issues/comments/134115930","html_url":"https://github.com/bokeh/bokeh/pull/2720#issuecomment-134115930","issue_url":"https://api.github.com/repos/bokeh/bokeh/issues/2720","id":134115930,"user":{"login":"bryevdv","id":1078448,"avatar_url":"https://avatars.githubusercontent.com/u/1078448?v=3","gravatar_id":"","url":"https://api.github.com/users/bryevdv","html_url":"https://github.com/bryevdv","followers_url":"https://api.github.com/users/bryevdv/followers","following_url":"https://api.github.com/users/bryevdv/following{/other_user}","gists_url":"https://api.github.com/users/bryevdv/gists{/gist_id}","starred_url":"https://api.github.com/users/bryevdv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bryevdv/subscriptions","organizations_url":"https://api.github.com/users/bryevdv/orgs","repos_url":"https://api.github.com/users/bryevdv/repos","events_url":"https://api.github.com/users/bryevdv/events{/privacy}","received_events_url":"https://api.github.com/users/bryevdv/received_events","type":"User","site_admin":false},"created_at":"2015-08-24T09:44:20Z","updated_at":"2015-08-24T09:44:20Z","body":"At a glance it looks like the majority of test failures are related to `izip`, which can be fixed up by using \r\n```\r\nfrom six.moves import zip\r\n```\r\ninstead (this `zip` is a generator)"}}