我正在寻找创建一些镶嵌图以可视化列联表。 Bokeh本身不支持马赛克图(据我所知),因此我正在使用statsmodels
库(link)。
问题是该库中的图没有扩展Bokeh的Figure
界面,因此我无法让它们显示在网页中。理想情况下,我希望用户能够使用网页上的下拉框选择感兴趣的变量:
Bokeh如何直接显示统计模型mosaic
的结果?
答案 0 :(得分:1)
散景不直接支持镶嵌图,但是mosaic
函数可以返回散景本身绘制图所需的所有几何数据。此外,如果您通过ax=None
:
_, rects_dict = mosaic(df, ..., ax=None)
然后将抑制Matplotlib图的生成。以下是一个完整的示例,演示了如何使用rects_dict
中的返回mosaic
值:
import pandas as pd
from statsmodels.graphics.mosaicplot import mosaic
from bokeh.plotting import figure, ColumnDataSource, show
from bokeh.transform import factor_cmap
df = pd.DataFrame({
'size' : ['small', 'medium', 'medium', 'large', 'small', 'large', 'small', 'medium'],
'length' : ['long', 'short', 'long', 'short', 'long', 'long', 'short', 'short']
})
_, rects_dict = mosaic(df, ['size', 'length'], gap=0, ax=None)
rects = rects_dict.values()
cats = rects_dict.keys()
source = ColumnDataSource(data=dict(
x = [r[0]+r[2]/2 for r in rects], # bokeh wants x center, not corner
y = [r[1]+r[3]/2 for r in rects], # bokeh wants y center, not corner
w = [r[2] for r in rects],
h = [r[3] for r in rects],
size = [c[0] for c in cats ],
len = [c[1] for c in cats ],
))
fill_cmap = factor_cmap('size', palette="Pastel1_3", factors=['small', 'medium', 'large'])
p = figure(x_range=(0,1), y_range=(0,1), x_axis_location=None, y_axis_location=None,
tools="", toolbar_location=None, tooltips="@size @len")
p.rect(x='x', y='y', width='w', height='h', line_color="white", source=source,
fill_color=fill_cmap)
show(p)
这将在下面的图形中显示一个交互式悬停工具提示,以显示类别。您还可以直接使用标准Bokeh方式添加颜色条或任何其他Bokeh交互式功能: