我有一个包含布尔列的pandas数据框,如下所示:
my $book = Spreadsheet::Read->new();
my $book = ReadData
('D:\Profiles\jmahroof\Desktop\Scheduled_Build_Overview.xls');
my $cell = "CD7";
my $n = "1";
my $send = $book->[$n]{$cell};
$send =~ s/\(/ /g;
$send =~ s/\)//g;
我想在Y上绘制B的值,在X上绘制基于C的条件背景颜色的A. 我的意思是这样的:
我可以使用盒子注释吗?
答案 0 :(得分:2)
是的,可以使用left
的{{1}}和right
参数:
BoxAnnotation
为简化起见,我在此处添加了另一行,以获得绘制的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
的连续行:
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
该解决方案尚未处理单个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
)值。但是,您尚未为此方案指定适当的行为。