2016-09-27 4 views
8

Я пытаюсь отобразить таблицу в ноутбуке jupyter с использованием python и библиотеки визуализации Bokeh. Я использую следующий код для отображения таблицы в jupyter ноутбук, где результат является dataframe:Столбцы и заголовки столбцов Python Bokeh не выстраиваются в линию

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')) 

Раньше я использовал vform хотя это сейчас, кажется, не изношено и больше не работает, как ожидалось либо. Это произошло после обновления моей версии ноутбука jupyter. Независимо от того, что я установить ширину моих заголовков столбцов не выстраиваются в линию и имеют странные совпадения с таблицей:

enter image description here

Это не произошло раньше, я был в состоянии получить хороший стол, где все подкладки вверх. Даже если я настраиваю заголовки, они все равно не выстраиваются в линию. Этого не происходит, когда я сохраняю таблицу как html-файл вместо вызова show() непосредственно в ноутбуке Jupyter. Что мне нужно изменить? Есть лучший способ сделать это?

Полный пример

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')) 

Это работает на системе со следующими версиями:

  • Jupyter 4.2.0
  • Python 2.7.12 (АНАКОНДА 2.3.0 64 бит)
  • Bokeh 0.12.2

ответ

2

Дизайн css для виджетов Bokeh для ноутбуков Jupyter находится в http://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.0.min.css, где height:16px для элементов .bk-root .bk-slick-header-column.bk-ui-state-default жестко закодирован. Поэтому он не может быть изменен без изменения css.

Он может быть в стиле adhock с помощью функции HTML

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

Для изменения постоянной CSS могут быть добавлены в каталог custom в Jupyter конфигурации. Вы можете выяснить, где она по телефону

jupyter --config-dir 

По умолчанию это ~/.jupyter Новый CSS нужно быть в ~/.jupyter/custom/custom.css тогда.

Перед enter image description here

После enter image description here

+0

, что о ширине не выстраивались? – klib

+2

Это труднее исправить, поскольку ширины заголовков и строк заданы по-разному в условиях css. Можно использовать '.bk-root .bk-slick-header-column.bk-ui-state-default: first-child { width: 40px! Important; } ' , но только первый столбец будет выровнен – jackdaw

 Смежные вопросы

  • Нет связанных вопросов^_^