2017-10-21 12 views
0

は、ここで、ここでのコードの例です: https://imgur.com/a/mKPNPどのように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をお勧めします。

平均時間では、

  • 使用1つのhbar_stackへの呼び出しが、あなたのデータへのオフセットプリベークを仕事ができるいくつかの異なる方法があります。 CDS列がnumpy配列またはpandas系列の場合、これは簡単です(スタックされるすべての列にオフセットを追加します)。以下のような何か:

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

    これはそのままである列は、通常のPythonのリストですが、あなたは配列/シリーズを使用する場合は、上記なさのようにオフセットを追加することになるので上記のコードでは動作しません。

  • hbarへの複数の呼び出しを使用して、バーをスタックします。 hbarグリフメソッドは、デフォルトでゼロになるようなメッセージleftを受け付けますが、固定値または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を使用します。CDS列が配列または連続している場合にも容易になります。基本的に、あなたは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] 
関連する問題