首页 > 解决方案 > 散景嵌套分类条形图中的 Javascript 错误

问题描述

我正在创建一个带有散景和熊猫的嵌套分类条形图。我测试了 Bokeh 文档中包含的示例(如下所示)

from bokeh.io import show, output_file
from bokeh.plotting import figure
from bokeh.palettes import Spectral5
from bokeh.sampledata.autompg import autompg_clean as df
from bokeh.transform import factor_cmap

output_file("bar_pandas_groupby_nested.html")

df.cyl = df.cyl.astype(str)
df.yr = df.yr.astype(str)

group = df.groupby(by=['cyl', 'mfr'])

index_cmap = factor_cmap('cyl_mfr', palette=Spectral5, factors=sorted(df.cyl.unique()), end=1)

p = figure(plot_width=800, plot_height=300, title="Mean MPG by # Cylinders and Manufacturer",
           x_range=group, toolbar_location=None, tooltips=[("MPG", "@mpg_mean"), ("Cyl, Mfr", "@cyl_mfr")])

p.vbar(x='cyl_mfr', top='mpg_mean', width=1, source=group,
       line_color="white", fill_color=index_cmap, )

p.y_range.start = 0
p.x_range.range_padding = 0.05
p.xgrid.grid_line_color = None
p.xaxis.axis_label = "Manufacturer grouped by # Cylinders"
p.xaxis.major_label_orientation = 1.2
p.outline_line_color = None

show(p)

我正在尝试将其与我的一组数据一起应用。但是,我们运行脚本时出现错误

js错误

这是我的代码:

def test(data):
    output_file("bar_pandas_groupby_nested.html")
    print(df.head())
    data.prueba = data.prueba.astype(str)
    data.inst_nombre_institucion = data.inst_nombre_institucion.astype(str)

    group = data.groupby(by=['prueba', 'inst_nombre_institucion'])

    index_cmap = factor_cmap('prueba_inst_nombre_institucion', palette=Spectral5, factors=sorted(data.prueba.unique()), end=1)

    p = figure(plot_width=800, plot_height=300, title="Mean",
               x_range=group, toolbar_location=None, tooltips=[("MPG", "@media_mod_ingles_mean"), ("prueba, institucion", "@prueba_inst_nombre_institucion")])

    p.vbar(x='prueba_inst_nombre_institucion', top='media_mod_ingles_mean', width=1, source=group,
           line_color="white", fill_color=index_cmap, )

    p.y_range.start = 0
    p.x_range.range_padding = 0.05
    p.xgrid.grid_line_color = None
    p.xaxis.axis_label = "Mean"
    p.xaxis.major_label_orientation = 1.2
    p.outline_line_color = None

    show(p)
    return True

我的数据看起来像这样: data.head()

为什么我会收到此错误?

谢谢你的时间!

更新:

data.csv 和脚本可以在这里下载

标签: pythonpandasbokeh

解决方案


问题是你的标签太长了,当它们垂直放置时,它们太长无法放入 300px 高的绘图中。如果我将方向更改为

p.xaxis.major_label_orientation = 0.2

然后情节就可以渲染了,但是也可以看出问题:

在此处输入图像描述

或者,如果我使标签实际上几乎是垂直的(~pi/2),并使绘图高度为 800px,那么一切都是可见的:

在此处输入图像描述

但我会说这仍然很难解释/阅读。我建议尝试找到较短的字符串以用于您的类别。


推荐阅读