2017-04-07 5 views
1

は私はこのようなブール列を含むパンダのデータフレームを有する:ボケプロット条件背景色

| A | B | C | 
| 1 | 3 | True | 
| 2 | 4 | True | 
| 3 | 4 | False | 
| 4 | 1 | False | 
| 5 | 2 | True | 

私はに基づく条件付き背景色とYとX上のAにBの値をプロットしたいですC 私は次のような意味を持っています:simulated result

ボックスアノテーションでこれを行うことはできますか?

答えて

1

はい、それはBoxAnnotationleftright引数使用可能です:簡略化のため

import pandas as pd 
from bokeh.plotting import figure, show, output_file, output_notebook 
from bokeh.models import BoxAnnotation 

output_notebook() 

# dummy data 
df = pd.DataFrame({"A": [1, 2, 3, 4, 5, 6], 
        "B": [3, 4, 4, 1, 2, 3], 
        "C": [True, True, False, False, True, True]}) 
print(df) 

>>>  A B C 

    0 1 3 True 
    1 2 4 True 
    2 3 4 False 
    3 4 1 False 
    4 5 2 True 
    5 6 3 True 

を、私はプロットのためにも、Trueカウントを取得するには、ここで別の行を追加します。

df["cons"] = (df["C"].diff(1) != 0).astype('int').cumsum() 
mask = df["cons"] % 2 == 1 

cons_indices = df[mask].groupby("cons").apply(lambda x: x.A.values) 
print(cons_indices) 

>>> cons 
    1 [1, 2] 
    3 [5, 6] 
    dtype: object 

をそして最終的にそれをプロットします:

は今、Trueを含む連続した行を取得

p = figure(title="Annotations") 
p.line(df["A"], df["B"]) 

for cons_index in cons_indices: 
    low_box = BoxAnnotation(left=cons_index.min(), right=cons_index.max(), fill_color="Blue") 
    p.add_layout(low_box) 

show(p) 

解決策はまだ、単一True(非連続的なTrue)の値を扱っていません。ただし、このシナリオでは適切な動作を指定していません。

enter image description here

+0

それが動作おかげで、私の本当のデータセットは、日時のインデックスを持っているので、ビットを適応しなければならなかったが、それはどうもありがとうございました、今okです – bAN