Interactive demo | kapi/9-mpl

Intro

Run
Server offline
Idle

Parameters

Result

(none yet)

Sample api request

Source code

def endpoint(ctx:str=default) -> PIL.Image.Image: # returns base64 image
    ctx = json.loads(ctx)
    n = len(ctx); ncols = math.ceil(n**0.5); nrows = math.ceil(n/ncols)
    fig, axes = plt.subplots(nrows, ncols, figsize=(ncols*5, nrows*4))
    if nrows*ncols == 1: axes = [axes]
    if axes | cli.shape() | cli.shape(0) > 1: axes = axes.flatten()
    for i, [ax, es] in enumerate(zip(axes, ctx)):
        plt.sca(ax)
        for e in es:
            e0 = e[0] # big switch
            if e0 == "plot": ax.plot(e[1], e[2])
            elif e0 == "title": ax.set_title(e[1])
            elif e0 == "xscale": ax.set_xscale(e[1])
            elif e0 == "yscale": ax.set_xscale(e[1])
            elif e0 == "xlabel": ax.set_xlabel(e[1])
            elif e0 == "ylabel": ax.set_ylabel(e[1])
            elif e0 == "grid": ax.grid(e[1])
            elif e0 == "legend":
                kws = {}
                if len(e) >= 2: kws["framealpha"] = e[2]
                if e[1]: ax.legend(e[1], **kws)
                else: ax.legend(**kws)
    axes[i+1:] | cli.op().remove().all() | cli.deref(); plt.tight_layout()
    with lock: im = fig | cli.toImg()
    return im; #return im | cli.toBytes() | aS(base64.b64encode) | op().decode()