在函数未渲染中返回的散景图

问题描述 投票:0回答:1

我正在编写一个函数来简化绘图,调用时它还没有给出任何错误

show(plt)

返回值没有任何反应。我正在使用Jupyter笔记本。我已经打电话给:

output_notebook()

这里是功能代码:

def plot_dist(x, h, title, xl="X axis", yl="Y axis", categories=None, width=0.5, bottom=0, color="#DC143C", xmlo=None, ymlo=None, xlo=-18, ylo=5):
    total = np.sum(h)
    source = ColumnDataSource(data={
        "x":x,
        "h":h,
        "percentages":[str(round((x*100)/total, 2)) + "%" for x in h]
    })
    plt = figure(
        title=title,
        x_axis_label=xl,
        y_axis_label=yl
    )
    plt.vbar(
        x="x",
        width=width,
        bottom=bottom,
        top="h",
        source=source,
        color=color
    )
    if xmlo is None:
        if categories is None:
            raise ValueError("If no categories are provided xaxis.major_label_overrides must be defined")
        plt.xaxis.major_label_overrides = {
            int(x):("(" + str(c.left) + "-" + str(c.right) + "]") for x,c in enumerate(categories)
        }
    else:
        plt.xaxis.major_label_overrides = xmlo

    if ymlo is None:
        plt.yaxis.major_label_overrides = { int(x):(str(int(x)/1000)+"k") for x in range(0, h.max(), math.ceil((h.max()/len(h))) )}
    else:
        plt.yaxis.major_label_overrides = ymlo

    labels = LabelSet(
        x=str(x), y=str(h), text="percentages", level="glyph",
        x_offset=xlo, y_offset=ylo, source=source, render_mode="canvas"
    )
    plt.add_layout(labels)

    return plt   

这就是它的调用方式:

X = [x for x in range(0, len(grps.index))]
H = grps.to_numpy()
plt = plot_dist(X, H, "Test", "xtest", "ytest", grps.index.categories)

[X只是一个列表,grps是调用熊猫的DataFrame.groupby]的结果>

正如我说的那样,它不会给出任何错误,所以我认为问题出在ColumnDataSource对象上,我必须将其创建为错误。任何帮助表示赞赏,谢谢!

编辑1:显然删除以下行解决了问题:

plt.add_layout(labels)

现在该图呈现了更正,但是我需要添加标签,知道吗?

编辑2:好的,我已经解决了问题,在运行代码时检查Web控制台,以下错误显示:

Error: attempted to retrieve property array for nonexistent field

问题出在以下几行:

    labels = LabelSet(
        x=str(x), y=str(h), text="percentages", level="glyph",
        x_offset=xlo, y_offset=ylo, source=source, render_mode="canvas"
    )

特别是分配x=str(x)y=str(h)。将其更改为简单的x="x"并由y="h"解决。

我正在编写一个函数来简化我的绘图,当我在返回值上调用show(plt)时,它没有给出任何错误。我正在使用Jupyter笔记本。我已经做了一个...

python-3.x jupyter-notebook bokeh
1个回答
1
投票

代码的问题在于标签声明:

© www.soinside.com 2019 - 2024. All rights reserved.