Python Bokeh表列和标题不对齐

kli*_*lib 8 python ipython bokeh jupyter

我试图使用python和可视化库Bokeh在jupyter笔记本中显示一个表.我使用以下代码在jupyter笔记本中显示我的表,其中result是一个数据帧:

source = ColumnDataSource(result)

columns = [
        TableColumn(field="ts", title="Timestamp"),
        TableColumn(field="bid_qty", title="Bid Quantity"),
        TableColumn(field="bid_prc", title="Bid Price"),
        TableColumn(field="ask_prc", title="Ask Price"),
        TableColumn(field="ask_qty", title="Ask Quantity"),
    ]

data_table = DataTable(source=source, columns=columns, fit_columns=True, width=1300, height=800)
show(widgetbox([data_table], sizing_mode = 'scale_both'))
Run Code Online (Sandbox Code Playgroud)

以前我使用vform虽然现在似乎已经折旧,但也不再按预期工作.这是在我的jupyter笔记本版本更新后发生的.无论我设置的宽度如何,我的列标题都没有排列并且与表格有一些奇怪的重叠:

在此输入图像描述

之前没有发生这种情况,我能够得到一张漂亮的桌子,一切都排好了.即使我调整标题他们仍然不会排队.当我将表保存为html文件而不是直接在Jupyter笔记本中调用show()时,不会发生这种情况.我需要改变什么?有一个更好的方法吗?

完整的例子

from bokeh.io import show, output_notebook
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import TableColumn, DataTable
import pandas as pd

output_notebook()

d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 
 'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

source = ColumnDataSource(df)

columns = [
    TableColumn(field="one", title="One"),
    TableColumn(field="two", title=" Two"),
]

data_table = DataTable(source=source, columns=columns, 
    fit_columns=True, width=800, height=800)
show(widgetbox([data_table], sizing_mode = 'scale_both'))
Run Code Online (Sandbox Code Playgroud)

这是在具有以下版本的系统上运行的:

  • Jupyter 4.2.0
  • Python 2.7.12(Anaconda 2.3.0 64位)
  • 散景0.12.2

jac*_*daw 2

Jupyter 笔记本的 Bokeh 小部件的 css 样式位于http://cdn.bokeh.org/bokeh/release/bokeh-widgets-0.12.0.min.css,其中height:16px元素.bk-root .bk-slick-header-column.bk-ui-state-default是硬编码的。所以如果不改变css就无法改变它。

它可以根据HTML功能进行临时设计

from IPython.core.display import HTML
HTML("""
<style>
.bk-root .bk-slick-header-column.bk-ui-state-default {
height: 25px!important;
}
</style>
""")
Run Code Online (Sandbox Code Playgroud)

对于持久性更改,可以将 css 添加到customJupyter 配置中的目录中。您可以通过拨打电话了解它在哪里

jupyter --config-dir
Run Code Online (Sandbox Code Playgroud)

默认情况下,~/.jupyter 新的 css 需要在其中~/.jupyter/custom/custom.css

在此输入图像描述

在此输入图像描述

  • 修复起来比较困难,因为在 css 条件下标题和行的宽度设置不同。可以使用 `.bk-root .bk-slick-header-column.bk-ui-state-default:first-child { width: 40px!important; }` 但只有第一列会对齐 (2认同)