2016-09-27 16 views
8

Bir masaüstünde python ve görselleştirme kitaplığı Bokeh'u kullanarak bir tabloyu görüntülemeye çalışıyorum. Ben sonuç bir dataframe olduğu bir jupyter defterine benim tablosunu görüntülemek için aşağıdaki kodu kullanın: Bu şimdi amorti gibi görünüyor ve ya beklendiği gibi artık çalışmıyor olsa önce ben vform kullanıyordumPython Bokeh tablo sütunları ve başlıkları sıralanmıyor

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

. Jupyter notebook versiyonum güncellendikten sonra bu gerçekleşti. Ne olursa olsun ben genişliğini ayarlamak ne benim sütun başlıkları sıraya ve masa ile garip bir çakışma yok: her şey kaplı nerede

enter image description here

Bu daha önce olmadı, ben güzel tablo elde edebildi yukarı. Başlıkları ayarlasam bile, hala hizaya girmezler. Tabloyu doğrudan Jupyter not defterinde çağırmak yerine tabloyu bir html dosyası olarak kaydettiğimde bu olmaz. Neyi değiştirmem gerekiyor? Bunu yapmanın daha iyi bir yolu var mı? 4.2.0

  • Python 2.7.12 (Anaconda 2.3.0

    • Jupyter 64 bit:

      Tam Örnek

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

      Bu aşağıdaki sürümleri ile bir sistemde çalışan)

    • Bokeh 0.12.2
  • cevap

    2

    Jupyter dizüstü bilgisayarları için Bokeh widget'larının css stili, http://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.0.min.css numaralı belgede öğeleri için height:16px kodlanmıştır. Yani css değiştirmeden değiştirilemez.

    Bu kalıcı değişiklik Css için HTML fonksiyonu

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

    ile adhock tarz olabilir Jupyter yapılandırmasında custom dizini ilave edilebilir. o Varsayılan olarak

    jupyter --config-dir 
    

    arayarak nerede olduğunu o zaman ~/.jupyter/custom/custom.css olmak ~/.jupyter yeni css ihtiyacıdır anlayabiliriz. Ne genişliği yaklaşık enter image description here

    +0

    sonra enter image description here

    önce

    sıraya olmasın? – klib

    +2

    Düzeltmek daha zordur, çünkü başlık ve satırların genişlikleri css koşullarında farklı şekilde ayarlanır. '.bk-root .bk-slick-header-column.bk-ui-state-default varsayılanını kullanmak mümkündür: ilk çocuk { width: 40px! Important; } , ancak yalnızca ilk sütun hizalanacak – jackdaw