1

我只使用 Bokeh 的 BokehJS 部分,因为我正在构建一个更加面向生产的系统。不幸的是,Bokeh 的实际 BokehJS 部分似乎没有太多文档记录,这使得很难找到所需的信息,例如如何为 bokehJS 对象格式化数据。

我想做的是制作一个简单的折线图,但是我不想只有一条线,而是想要多条线,并且可以制作一个图例来描述每条线。这是一个非常基本的情节,但是我在 bokehJS 中没有找到任何方法来做到这一点。为了用单行绘制图,我执行以下 javascript:

    Bokeh.Plotting.show(
        Bokeh.Plotting.make_plot({type:'line'}, {x:[1,2],y:[4,5]}, {})
        ,'.mydivcontainer');

我如何改变它,以便我可以在同一个情节中拥有 5 行以及一个图例,基本上类似于用标准散景编写的:

从集合导入 OrderedDict 导入 pandas 作为 pd

AAPL = pd.read_csv("aapl.csv", parse_dates=["Date"])
MSFT = pd.read_csv( "msft.csv", parse_dates=["Date"])
IBM = pd.read_csv( "ibm.csv", parse_dates=["Date"])

xyvalues = OrderedDict(
    AAPL = AAPL[("Date", "Adj Close")],
    MSFT = MSFT[("Date", "Adj Close")],
    IBM  = IBM[("Date", "Adj Close")],
)
df = pd.concat(xyvalues, axis=1, names=["l0", "l1"])

from bokeh.charts import TimeSeries
ts = TimeSeries(
    df, title="timeseries, pd_input",
    filename="stocks_timeseries.html")
ts.legend("top_left").show()

(取自发行说明:http ://continuum.io/blog/bokeh-0.6 )

非常感谢您的帮助

4

2 回答 2

1

JS 接口的开发和文档记录确实落后于其他接口(主要是 python,但也包括 scala 和 Julia 以及很快的 R)。我们计划改进这一点,但正如您可以想象的那样,有很多相互竞争的优先事项。

但是我会提到另一个选项,以防它对您有用。可以从python创建绘图JS,然后直接使用JS。那就是你只用python来设置东西,然后你可以把python扔掉。您可以使用函数bokeh.embed将您的 python 绘图对象图转换为 JS,您可以随意嵌入。

使用更新版本的 Bokeh,您还可以轻松地获取绘图对象(例如数据源)以直接从 JS 更新绘图。参见,例如:

https://github.com/bokeh/bokeh/blob/master/examples/embed/spectrogram/spectrogram.coffee#L187

于 2014-12-02T22:04:08.027 回答
0

啊,现在我似乎已经弄清楚了。要启用多行,我似乎可以这样做:

Bokeh.Plotting.show(
      Bokeh.Plotting.make_plot([{type:'line'},{type:'line'}], [{x:[1,2],y:[4,5]},{x:[1,4],y:[2,5]}], {})
      ,'.mydivcontainer');

伟大的 :)

于 2014-12-04T23:03:55.807 回答