Python 3.x 如何在Pyviz Panel应用程序中成功生成马赛克图?

Python 3.x 如何在Pyviz Panel应用程序中成功生成马赛克图?,python-3.x,pandas,pyviz,mosaic-plot,panel-pyviz,Python 3.x,Pandas,Pyviz,Mosaic Plot,Panel Pyviz,我创建了以下数据帧df: 设置: 将熊猫作为pd导入 将numpy作为np导入 随机输入 导入副本 进口羽毛 将matplotlib.pyplot作为plt导入 从statsmodels.graphics.mosaicplot导入马赛克 导入plotly.graph_对象作为go 将plotly.express导入为px 作为pn导入面板 将全息视图导入为hv 将地理视图作为gv导入 将geoviews.feature导入为gf 进口纸箱 导入cartopy.feature作为cf 从地理视图导

我创建了以下数据帧
df

设置:

将熊猫作为pd导入
将numpy作为np导入
随机输入
导入副本
进口羽毛
将matplotlib.pyplot作为plt导入
从statsmodels.graphics.mosaicplot导入马赛克
导入plotly.graph_对象作为go
将plotly.express导入为px
作为pn导入面板
将全息视图导入为hv
将地理视图作为gv导入
将geoviews.feature导入为gf
进口纸箱
导入cartopy.feature作为cf
从地理视图导入选项
从cartopy进口crs作为CCR
导入hvplot.pandas
将colorcet作为cc导入
从colorcet.plotting导入样例
#pn.extension()#注释掉,因为这会导致间歇性javascript错误
gv.扩展(“bokeh”)
cols={“name”:[“Jim”、“Alice”、“Bob”、“Julia”、“Fern”、“Bill”、“Jordan”、“Pip”、“Shelly”、“Mimi”],
“年龄”:[19,26,37,45,56,71,20,36,37,55],
“性别”:[“男性”、“女性”、“男性”、“女性”、“女性”、“男性”、“男性”、“男性”、“女性”、“女性”],
“年龄段”:[“18-24”,“25-34”,“35-44”,“45-54”,“55-64”,“65-74”,“18-24”,“35-44”,“35-44”,“55-64”],
“保险续保月”:[1,2,3,3,3,4,5,5,6,7],
“邮政编码前缀”:[“EH”、“M”、“G”、“EH”、“EH”、“M”、“G”、“EH”、“M”、“EH”],
“邮政编码顺序”:[3,2,1,3,3,2,1,3,2,3],
“地区地方当局”:[“S12000036”、“E0800003”、“S12000049”、“S12000036”、“S12000036”、“E0800003”、“S12000036”、“E0800003”、“S12000036”、“E0800003”、“S12000049”、“S12000036”],
“blah1”:[3,无,无,8,8,无,1,无,无,无],
“blah2”:[无,无,无,33,5,无,66,3,22,3],
“blah3”:[“A”,无,“A”,无,“C”,无,无,无,无,无],
“blah4:[None,None,None,None,None,None,None,None,1]}
df=来自dict的pd.数据帧(cols)
df
Out[2]:
姓名年龄性别年龄乐队。。。blah1 blah2 blah3 blah4
0吉姆19男18-24。。。3.0纳南
1爱丽丝26女25-34。。。楠楠楠楠楠楠
2鲍勃37男35-44。。。南南阿南
3朱莉娅45女45-54。。。8.0 33.0无NaN
4蕨类56雌性55-64。。。8.0 5.0 C NaN
5法案71男65-74。。。楠楠楠楠楠楠
6约旦20男18-24。。。1.0 66.0无NaN
7点36分男35-44分。。。NaN 3.0无NaN
8雪莉37女35-44。。。NaN 22.0无NaN
9米米55女55-64。。。NaN 3.0无1.0
[10行x 12列]
df[[“性别”、“年龄段”、“邮政编码前缀”]]=df[[“性别”、“年龄段”、“邮政编码前缀”]]
df.info()

范围索引:10个条目,0到9
数据列(共12列):
名称10非空对象
年龄10非空int64
性别10非空类别
年龄组别10非空类别
保险\续保\第10个月非空int64
邮政编码\前缀10非空类别
邮政编码\u订单10非空int64
地方当局10区非空对象
blah1 4非空浮点64
blah2 6非空浮点64
blah3 3非空对象
blah4 1非空浮点64
数据类型:类别(3)、浮点64(3)、int64(3)、对象(3)
内存使用率:1.3+KB
问题:

我可以使用以下代码成功创建马赛克图:

fig,ax=plt.子批次(figsize=(15,10))
镶嵌(df,[“性别”,“年龄带],ax=ax);

但是,当我尝试使用
pn.interact
创建相应的应用程序时,我遇到了问题:

category\u cols=df.选择类型(include=“category”)
cat_atts=category_cols.columns.tolist()
猫咪
Out[4]:['sex'、'age\u band'、'postcode\u prefix']
def bivar\u cat(x=“sex”,y=“age\u band”):
如果x在cat_附件中,y在cat_附件中:
图,ax=plt.子批次(图尺寸=(15,10))
返回马赛克(df,[x,y],ax=ax);
应用程序df cat=pn.interact(双桅帆船cat,x=cat atts,y=cat atts)
app_df_cat
其结果如下:

上面呈现的马赛克图似乎对应于x&y的默认值(即
sex
&
age\u band
)。从下拉列表中为x或y选择新属性时,马赛克打印上方的文本会发生更改(该文本似乎是打印的字符串表示),但马赛克打印本身不会发生更改

我的问题是否可能与必须注释掉pn.extension()有关?我发现,当pn.extension()没有被注释掉时,它会导致一个间歇性的javascript错误,有时不会出现错误,有时会出现错误,但我的panel应用程序仍在加载,有时会出现错误,导致浏览器崩溃。(我在这里省略了javascript错误,因为它可能非常大——如果有帮助的话,我可以将其添加到我的帖子中。)我要说的是,错误的出现频率比没有的要高很多

奇怪的是,在我创建的其他应用程序中,省略了pn.extension()和包含它,我没有发现任何区别。 然而,由于文档总是指定要包含它,我希望我必须为所有绘图设置适当的扩展才能正常工作?(我在这些其他应用程序中成功绘制了plotly、hvplot、holoviews和geoviews绘图,包括和不包括pn.extension()和pn.extension(“plotly”)

是否可以基于马赛克图制作面板应用程序

谢谢


软件信息:

OSXCatalina
浏览器火狐
python 3.7.5
笔记本电脑6.0.2
熊猫0.25.3
面板0.7.0
plotly 4.3.0
plotly_express 0.4.1
全息视图1.12.6
地理视图1.6.5
hvplot 0.5.2
统计
def bivar_cat(x='sex', y='age_band'):
    fig, ax = plt.subplots(figsize=(15,10))
    mosaic(df, [x,y], ax=ax)
    plt.close()
    return fig

app_df_cat = pn.interact(
    bivar_cat, 
    x=cat_atts, 
    y=cat_atts,
)

app_df_cat