Feature: implement Bokeh dataframe plotability
[Bokeh](http://bokeh.pydata.org) specializes on large data, and is using pandas in some of their examples (e.g. [here](https://github.com/ContinuumIO/bokeh/blob/master/examples/plotting/file/glucose.py)).
As pandas is built to work with large data-sets as well, I believe they would make an excellent couple!

However, I have tried to use the built-in dataframe plotting in the [glucose notebook](https://github.com/ContinuumIO/bokeh/blob/master/examples/plotting/notebook/glucose.ipynb) but without success, receiving either TypeErrors or KeyErrors, depending on how I initiate the plot:

``` python
data.head()

isig    glucose inrange
datetime            
2010-03-24 09:51:00  22.59   258     False
2010-03-24 09:56:00  22.52   260     False
2010-03-24 10:01:00  22.23   258     False
2010-03-24 10:06:00  21.56   254     False
2010-03-24 10:11:00  20.79   246     False
```

``` python
data.isig.plot()

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-23-14244d9a86ef> in <module>()
----> 1 data.isig.plot()

/Users/maye/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas-0.13.1_648_gad1f47d-py2.7-macosx-10.6-x86_64.egg/pandas/tools/plotting.pyc in plot_series(series, label, kind, use_index, rot, xticks, yticks, xlim, ylim, ax, style, grid, legend, logx, logy, secondary_y, **kwds)
   2114                      secondary_y=secondary_y, **kwds)
   2115 
-> 2116     plot_obj.generate()
   2117     plot_obj.draw()
   2118 

/Users/maye/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas-0.13.1_648_gad1f47d-py2.7-macosx-10.6-x86_64.egg/pandas/tools/plotting.pyc in generate(self)
    916     def generate(self):
    917         self._args_adjust()
--> 918         self._compute_plot_data()
    919         self._setup_subplots()
    920         self._make_plot()

/Users/maye/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas-0.13.1_648_gad1f47d-py2.7-macosx-10.6-x86_64.egg/pandas/tools/plotting.pyc in _compute_plot_data(self)
   1003         if is_empty:
   1004             raise TypeError('Empty {0!r}: no numeric data to '
-> 1005                             'plot'.format(numeric_data.__class__.__name__))
   1006 
   1007         self.data = numeric_data

TypeError: Empty 'Series': no numeric data to plot
```

``` python
data.plot(data.index.to_series(), data.isig)

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-24-e46a01c88c5e> in <module>()
----> 1 data.plot(data.index.to_series(), data.isig)

/Users/maye/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas-0.13.1_648_gad1f47d-py2.7-macosx-10.6-x86_64.egg/pandas/tools/plotting.pyc in plot_frame(frame, x, y, subplots, sharex, sharey, use_index, figsize, grid, legend, rot, ax, style, title, xlim, ylim, logx, logy, xticks, yticks, kind, sort_columns, fontsize, secondary_y, **kwds)
   1985             label = x if x is not None else frame.index.name
   1986             label = kwds.pop('label', label)
-> 1987             ser = frame[y]
   1988             ser.index.name = label
   1989 

/Users/maye/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas-0.13.1_648_gad1f47d-py2.7-macosx-10.6-x86_64.egg/pandas/core/frame.pyc in __getitem__(self, key)
   1646         if isinstance(key, (Series, np.ndarray, list)):
   1647             # either boolean or fancy integer index
-> 1648             return self._getitem_array(key)
   1649         elif isinstance(key, DataFrame):
   1650             return self._getitem_frame(key)

/Users/maye/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas-0.13.1_648_gad1f47d-py2.7-macosx-10.6-x86_64.egg/pandas/core/frame.pyc in _getitem_array(self, key)
   1690             return self.take(indexer, axis=0, convert=False)
   1691         else:
-> 1692             indexer = self.ix._convert_to_indexer(key, axis=1)
   1693             return self.take(indexer, axis=1, convert=True)
   1694 

/Users/maye/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/pandas-0.13.1_648_gad1f47d-py2.7-macosx-10.6-x86_64.egg/pandas/core/indexing.pyc in _convert_to_indexer(self, obj, axis, is_setter)
   1065                     if isinstance(obj, tuple) and is_setter:
   1066                         return {'key': obj}
-> 1067                     raise KeyError('%s not in index' % objarr[mask])
   1068 
   1069                 return indexer

KeyError: "['22.59' '22.52' '22.23' ..., '29.06' '29.3' '30.8'] not in index"
```

I am guessing that we need to teach the DataFrame to check if the Bokeh framework is active and then point the plotter to the slightly different syntax for Bokeh plotting, which we would need to implement of course. Can somebody shed a light on what is going wrong in general in above examples?

Considering the possibility of having active zoomable plots over usually massively too long time-series with lots of data points in them I am very intrigued by this feature and would love to see it implemented. If further discussion in this issue can guide me on how to do the recognition part of the active plotting framework (or if somebody would take that on would  be great), I am volunteering in wrapping the different Bokeh plotting syntaxes, so that e.g. the standard df.colname.plot() will work as well with Bokeh underneath.

Sounds good?
