2016-09-27 15 views
8

Próbuję wyświetlić tabelę w notatniku Juwatera przy użyciu pythona i biblioteki wizualizacji Bokeh. Używam następujący kod do wyświetlania mój stół w notebooku jupyter gdzie wynik jest dataframe:Kolumny i nagłówki tabeli Bokeh w programie Python nie są ustawione w jednej linii.

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

Wcześniej używałem vform chociaż wydaje się to teraz, aby być amortyzowane i nie działa zgodnie z oczekiwaniami albo. Miało to miejsce po aktualizacji mojej wersji notatnika jupyter. Niezależnie od tego, co mam ustawić szerokość kolumny moje nagłówki nie wyrównane i mają dziwne zachodząc na stole:

enter image description here

tak się nie stało, zanim udało mi się dostać ładny stół, gdzie wszystko podszyte w górę. Nawet jeśli wyreguluję nagłówki, nadal nie będą ustawione. Nie dzieje się tak, gdy zapisuję tabelę jako plik html zamiast wywoływać show() bezpośrednio w notatniku Jupyter. Co muszę zmienić? Czy jest lepszy sposób to zrobić?

Pełna Przykład

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

jest uruchomione w systemie z następujących wersjach:

  • Jupyter 4.2.0
  • PYTHON 2.7.12 (AnaConDa® 2.3.0 64 bit)
  • Bokeh 0.12.2

Odpowiedz

2

Stylizacja css widżetów Bokeh dla notebooków Jupyter jest w http://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.0.min.css, gdzie height:16px dla elementów .bk-root .bk-slick-header-column.bk-ui-state-default jest na stałe. Więc nie można go zmienić bez zmiany css.

To może być stylizowany adhock przez HTML funkcji

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

Dla uporczywego zmiany css mogą być dodawane do custom katalogu w Jupyter config. Można dowiedzieć się, gdzie jest to poprzez wywołanie

jupyter --config-dir 

Domyślnie jest to ~/.jupyter Nowy css trzeba być w ~/.jupyter/custom/custom.css wtedy.

Przed enter image description here

Po enter image description here

+0

co o szerokości nie w kolejce? – klib

+2

Jest trudniejsze do naprawienia, ponieważ szerokości nagłówka i wierszy są ustawione inaczej w warunkach css. Możliwe jest użycie '.bk-root .bk-slick-header-column.bk-ui-state-default: first-child { width: 40px! Important; } ' ale tylko pierwsza kolumna zostanie wyrównana – jackdaw