我假设Dataframes和ColumnDataSource无法做到这一点,但对任何想法感兴趣:
对于图之间的LinkedBrush数据,我想使用“source”,例如:
p1.rect(x="X1", width="W",y=1, height="Val1" source = SourcesfromDF )
p1.rect(x="X1", width="W",y=2, height="Val2" source = SourcesfromDF )
p1.rect(x="X1", width="W",y=3, height="Val3" source = SourcesfromDF )
...
p1.rect(x1="X1", width="W",y=1000 height="Val1000" source = SourcesfromDF )
df中的每一行都需要有一个值才能工作,例如:
X1 W Val1 Val2 ... Val1000
12 13 41 52 ... 2100
但我的数据实际上是结构
X1 W Val1 Val2 ... Val1000
12 13 52 ... 2100
10 11 41 ... 210
2 14 91 62 ...
92 13 2 ...
(无法绘制)
源自字典列表 - 带字典:
[{'x1':12 , 'x2':13, 'values':{'val2':52 ,'val31':310, 'val1000':2100}}, ...]
我基本上将其转换为非嵌套字典
[{'x1':12 , 'x1':13, 'val2':52 ,'val31':310, 'val1000':2100}
...]
创建上述数据结构,其中包含许多未定义的值。
为了对每个'val'绘制X1 W,我创建了单独的图 来自提取的子集:
ValSubset=MyBigDF.loc[MyBigDF[ValX] > 0 ]
# looking to do this as generically so my 'vals' may be strings etc,
# so the expression should be something like != NaN
a)一个很好的解决方案是在一次调用的单个图中,针对每个val1到valN重复绘制所有X1-W值,而不是来自单个“源”的NaN。
b)我的第二个最佳解决方案是在NaN上放置一个完整的源,我可以在多个图上使用它,允许突出显示来自常见“源”的选定字形。 (也就是说,我怎样才能得到'源'的一个子集忽略了我想要绘制的'vals'的NaN)(我读到Bokeh可能支持NaN,但是对于相同值的多个绘图没有任何读法 - 但是可以查看同一轴上多个绘图的解决方法)
c)a)和b)都需要一个具有许多NaN字段的大型数据帧/ ColumnDataSource,并且对于每个新的“Val_”,每行需要另一个NaN。理想的情况是根据“Vals”