Source code for sequana.viz.bar

[docs] def stacked_bar(tag, title, datalist): """Return a CanvasJS stacked-bar script for the supplied data. ``datalist`` should be a list of dictionaries formatted as:: {"name": "A", "data": { "R1_mapped": 50, "R2_mapped": 50, "R1_unmapped": 50, "R2_unmapped": 50, } } """ dataitems = "" for item in datalist: datatext = [] for k, v in item["data"].items(): datatext.append('{y:%s,label:"%s"}' % (v, k)) datatext = ",\n ".join(datatext) params = {"name": item["name"], "datatext": datatext} dataitems += ( """ { type: "stackedBar100", showInLegend: true, name: "%(name)s", dataPoints: [ %(datatext)s ] }, """ % params ) metadata = {"tag": tag, "title": title, "dataitems": dataitems} script = """ <script type="text/javascript"> window.onload = function () { var chart = new CanvasJS.Chart("chartContainer%(tag)s", { theme: "theme2", title:{ text: "%(title)s" }, animationEnabled: true, axisY:{ title: "percent" }, legend :{ horizontalAlign: 'center', verticalAlign: 'bottom' }, toolTip: { shared: true }, data:[ %(dataitems)s ] }); chart.render(); } </script> """ return script % metadata
[docs] class CanvasBar(object): """Render a clickable CanvasJS bar chart from a DataFrame. Each row of ``data`` becomes a bar with optional click-through URL. """ def __init__(self, data, title="", tag="", xlabel="", ylabel_max_length=20, links=None, **kargs): """ :param data: a dataframe with name, value, url """ self.title = title self.tag = tag dataitems = "[" for x, y in data.iterrows(): formatter = '{y:%(value)s,label:"%(name)s",click:onClick,url:"%(url)s"},' dataitems += formatter % y dataitems += "]" self.metadata = {"dataitems": dataitems, "title": self.title, "xlabel": xlabel, "tag": self.tag}
[docs] def to_html(self, options={"maxrange": None}): script = """ var chart = new CanvasJS.Chart("chartContainer%(tag)s", { theme: "theme2", title:{ text: "%(title)s" }, animationEnabled: true, axisY:{ title: "%(xlabel)s", %(axisYmaximum)s }, exportFileName: "summary", exportEnabled: true, legend :{ horizontalAlign: 'center', verticalAlign: 'bottom' }, toolTip: { shared: true }, data:[ { type: "bar", dataPoints: %(dataitems)s }, ] }); chart.render(); """ params = self.metadata.copy() if options["maxrange"]: params["axisYmaximum"] = "maximum:%s," % options["maxrange"] else: params["axisYmaximum"] = "" return script % params
# <div id="chartContainer%(tag)s" style="height: 300px; width: 100%%;">