Python 如何使用Bokeh直接显示statsmodels马赛克

Python 如何使用Bokeh直接显示statsmodels马赛克,python,r,data-visualization,bokeh,rbokeh,Python,R,Data Visualization,Bokeh,Rbokeh,我希望创建一些马赛克图来可视化列联表。马赛克图(据我所知)不是Bokeh本地支持的,所以我使用的是statsmodels库() 问题是,该库中的绘图并没有扩展Bokeh的图界面,所以我无法让它们显示在网页中。理想情况下,我希望用户能够使用网页上的下拉框选择他们感兴趣的变量: Bokeh如何直接显示statsmodelsmosaic的结果?Bokeh不直接支持mosaic图表,但是mosaic函数可以返回Bokeh渲染绘图所需的所有几何数据。此外,如果通过ax=None: _, rects_d

我希望创建一些马赛克图来可视化列联表。马赛克图(据我所知)不是Bokeh本地支持的,所以我使用的是
statsmodels
库()

问题是,该库中的绘图并没有扩展Bokeh的
界面,所以我无法让它们显示在网页中。理想情况下,我希望用户能够使用网页上的下拉框选择他们感兴趣的变量:


Bokeh如何直接显示statsmodels
mosaic
的结果?

Bokeh不直接支持mosaic图表,但是
mosaic
函数可以返回Bokeh渲染绘图所需的所有几何数据。此外,如果通过
ax=None

_, rects_dict = mosaic(df, ..., ax=None)
然后,Matplotlib绘图的生成将被抑制。下面是一个完整的示例,演示了如何使用
mosaic
中的返回值
rects\u dict

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交互功能:


Bokeh不直接支持马赛克图表,但是
mosaic
函数可以返回Bokeh渲染绘图所需的所有几何数据。此外,如果通过
ax=None

_, rects_dict = mosaic(df, ..., ax=None)
然后,Matplotlib绘图的生成将被抑制。下面是一个完整的示例,演示了如何使用
mosaic
中的返回值
rects\u dict

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交互功能:


这不是要求提供工具或书籍推荐。这是问如何使用Bokeh完成特定任务(如何直接使用Bokeh绘制mosiac的结果)FWIW我有一个有用的答案可以发布。这不是问工具或书籍推荐。这是问如何使用Bokeh完成特定任务(如何直接使用Bokeh绘制
mosiac
的结果)FWIW我有一个有用的答案准备发布。