2017-10-21 134 views
0

這裏是這裏的代碼示例: https://imgur.com/a/mKPNP如何組織數據以指定不相對於0的hbar_stack的範圍? [背景虛化]

from bokeh.io import output_file, show 
from bokeh.models import ColumnDataSource 
from bokeh.palettes import GnBu3, OrRd3 
from bokeh.plotting import figure 

output_file("stacked_split.html") 

fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'] 
years = ["2015", "2016", "2017"] 

exports = {'fruits' : fruits, 
      '2015' : [2, 1, 4, 3, 2, 4], 
      '2016' : [5, 3, 4, 2, 4, 6], 
      '2017' : [3, 2, 4, 4, 5, 3]} 
imports = {'fruits' : fruits, 
      '2015' : [-1, 0, -1, -3, -2, -1], 
      '2016' : [-2, -1, -3, -1, -2, -2], 
      '2017' : [-1, -2, -1, 0, -2, -2]} 

p = figure(y_range=fruits, plot_height=250, x_range=(-16, 16), title="Fruit import/export, by year", 
      toolbar_location=None) 

p.hbar_stack(years, y='fruits', height=0.9, color=GnBu3, source=ColumnDataSource(exports), 
      legend=["%s exports" % x for x in years]) 

p.hbar_stack(years, y='fruits', height=0.9, color=OrRd3, source=ColumnDataSource(imports), 
      legend=["%s imports" % x for x in years]) 

p.y_range.range_padding = 0.1 
p.ygrid.grid_line_color = None 
p.legend.location = "top_left" 
p.axis.minor_tick_line_color = None 
p.outline_line_color = None 

show(p) 

我注意到,在hbar_stack的這個例子中,杆相對於基礎數據相對上爲0

會如何呈現我去指定一個不包含0的酒吧的範圍?例如,如果我想要一個酒吧在5到10之間?

+0

請發佈實際的代碼,**不**代碼的圖片。 – James

+0

@James修好了! –

回答

1

不幸的是hbar_stack(和vbar_stack)總是將相關值從零開始相加,沒有任何偏移量。添加偏移量似乎是一個潛在的合理和簡單的事情要考慮,所以我建議making a GitHub issue要求該功能。

在此同時,有可以工作

  • 使用一個呼叫hbar_stack但預烘偏移到您的數據的幾種不同的方式。如果您的CDS列是numpy數組或pandas系列,這將很簡單(將偏移添加到每個正在堆疊的列)。喜歡的東西:

    for x in years: 
        imports[year] += offset 
        exports[year] += offset 
    

    這將無法正常工作,是與上面的代碼,因爲列是常規的Python的列表,但是如果你使用數組/系列,然後加上偏移將如上完成。

  • hbar使用多個呼叫,並自行堆疊酒吧。字形方法hbar接受一個存在left的文件,該文件默認爲零,但您可以對其進行設置,但您可以將其設置爲固定值或CDS列。這也將是比較容易,如果CDS列陣列或系列:

    left = offset 
    for x in years: 
        right = left + exports[x] 
        p.hbar(left=left, right=right) 
        left = right 
    
    right = offset 
    for x in years: 
        left = right - imports[x] 
        p.hbar(left=left, right=right) 
        right = left 
    
  • 使用CustomJSTransform做在客戶端的堆疊。基本上,你會重新實現Stack但有一個在

0

偏移出爐我用這個函數從零定義的色彩範圍沒有開始。 我希望它可以幫助你。

def painter(rate,max_value,min_value,palette): 
     darkness = int(float(len(palette)-1) * float(rate - min_value)/float(max_value - min_value)) 
     return palette[darkness]