Esempio n. 1
0
def lg_create_legend_nd(wks, labels, x, y, shape, rlist=None):
    # Set defaults
    if not rlist:
        rlist = {}
    else:
        rlist = _resource2dict(rlist)
    ngl._set_legend_res(rlist, rlist)
    _set_default(rlist, "lgOrientation", "Vertical")
    _set_default(rlist, "vpWidthF", 0.6)
    _set_default(rlist, "vpHeightF", 0.6)
    _set_default(rlist, "lgItemCount", len(labels))
    _set_default(rlist, "lgLineColors", [i + 2
                                         for i in range(rlist["lgItemCount"])])
    _set_default(rlist, "lgLineLabelFontColors", rlist["lgLineColors"])

    if rlist["lgOrientation"].lower() == "vertical":
        nItems, nLegends = shape
        lwidth = rlist["vpWidthF"] / nLegends
        lheight = rlist["vpHeightF"]
        xpos = [x + i * lwidth for i in range(nLegends)]
        ypos = [y for i in range(nLegends)]
    else:
        nLegends, nItems = shape
        lwidth = rlist["vpWidthF"]
        lheight = rlist["vpHeightF"] / nLegends
        ypos = [y - i * lheight for i in range(nLegends)]
        xpos = [x for i in range(nLegends)]

    istart = 0
    lg = []
    for xi, yi in zip(xpos, ypos):
        nItem = min(nItems, rlist["lgItemCount"] - istart)
        if nItem <= 0:
            continue
        iend = istart + nItem
        lres = rlist.copy()
        if rlist["lgOrientation"].lower() == "vertical":
            lres["vpWidthF"] = lwidth
            lres["vpHeightF"] = lheight * nItem / nItems
        else:
            lres["vpWidthF"] = lwidth * nItem / nItems
            lres["vpHeightF"] = lheight
        for key in ("lgDashIndexes", "lgItemPositions", "lgItemTypes",
                    "lgLabelStrings", "lgLineColors", "lgLineDashSegLens",
                    "lgLineLabelFontColors", "lgLineLabelFontHeights",
                    "lgLineLabelStrings", "lgLineThicknesses",
                    "lgMarkerColors", "lgMarkerIndexes", "lgMarkerSizes",
                    "lgMarkerThicknesses", ):
            if key in rlist:
                lres[key] = rlist[key][istart:iend]
        lres["lgItemCount"] = nItem

        lg.append(ngl.legend_ndc(wks, nItem, labels[istart:iend],
                                 xi, yi, _dict2Resource(lres)))
        istart = iend
    return lg
Esempio n. 2
0
def _set_custom_legend_defaults(rlist):
    ngl._set_legend_res(rlist, rlist)
    defaults = {
                "lgBoxBackground": -1,
#                "lgBoxLineColor": 1,
#                "lgBoxLineDashPattern": 0,
#                "lgBoxLineDashSegLenF": 0.15,
#                "lgBoxLineThicknessF": 1.0,
                "lgBoxLinesOn": False,
                "lgBoxMajorExtentF": .5,
                "lgBoxMinorExtentF": .6,
#                "lgDashIndexes": [0 for l in rlist["lgLabelStrings"]],
                "lgItemCount": len(rlist["lgLabelStrings"]),
                "lgItemOrder": range(len(rlist["lgLabelStrings"])),
#                "lgItemTypes": ["Lines" for l in rlist["lgLabelStrings"]],
                "lgLabelAlignment": "ItemCenters",
#                "lgLabelAngleF": 0.0,
#                "lgLabelConstantSpacingF": 0.0,
#                "lgLabelDirection": "Across",
#                "lgLabelFont": "pwritx",
#                "lgLabelFontAspectF": 1.0,
#                "lgLabelFontColor": 1,
#                "lgLabelFontHeightF": 0.02,
#                "lgLabelFontQuality": "High",
#                "lgLabelFontThicknessF": 1.0,
#                "lgLabelFuncCode": ":",
#                "lgLabelJust": "CentreCentre",
                "lgLabelOffsetF": 0.02,
                "lgLabelPosition": "Right",
                "lgLabelStride": 1,
                "lgLabelsOn": True,
                "lgLegendOn": True,
                "lgLineColors": range(2, len(rlist["lgLabelStrings"]) + 2),
#                "lgLineDashSegLenF": 0.15,
#                "lgLineLabelConstantSpacingF": 0.0,
#                "lgLineLabelFont": "pwritx",
#                "lgLineLabelFontAspectF": 1.0,
                "lgLineLabelFontHeights": [0.01
                                           for l in rlist["lgLabelStrings"]],
#                "lgLineLabelFontQuality": "High",
#                "lgLineLabelFontThicknessF": 1.0,
#                "lgLineLabelFuncCode": ":",
                "lgLineLabelStrings": rlist["lgLabelStrings"],
                "lgLineLabelsOn": False,
#                "lgMarkerIndexes": [1 for l in rlist["lgLabelStrings"]],
                "lgMarkerColors": range(2, len(rlist["lgLabelStrings"]) + 2),
                "lgOrientation": "Vertical",
                "lgPerimOn": False,
#                "lgPerimColor": 1,
#                "lgPerimDashPattern": 0,
#                "lgPerimDashSegLenF": 0.15,
                "lgPerimFillColor": -1,
#                "lgPerimThicknessF": 1.0,
#                "lgTitleAngleF": 0.0,
#                "lgTitleConstantSpacingF": 0.0,
#                "lgTitleDirection": "Across",
                "lgTitleExtentF": 0.15,
#                "lgTitleFont": "pwritx",
#                "lgTitleFontAspectF": 1.0,
#                "lgTitleFontColor": 1,
#                "lgTitleFontHeightF": .025,
#                "lgTitleFontQuality": "High",
#                "lgTitleFontThicknessF": 1.0,
#                "lgTitleFuncCode": ":",
#                "lgTitleJust": "CenterCenter",
                "lgTitleOffsetF": 0.03,
                "lgTitlePosition": "Top",
                "lgTitleString": "",
                }
    for key, val in defaults.items():
        _set_default(rlist, key, val)
    _set_default(rlist, "lgTitleOn", "lgTitleString" in rlist
                    and rlist["lgTitleString"].strip())
    for key in ("Top", "Bottom", "Left",  "Right"):
        _set_default(rlist, "lg{}MarginF".format(key), .05)
    _set_mono_default(rlist, "lgMonoDashIndex", "lgDashIndex",
                      "lgDashIndexes", 0)
    _set_mono_default(rlist, "lgMonoItemType", "lgItemType",
                      "lgItemTypes", "Lines")
    _set_mono_default(rlist, "lgMonoLineColor", "lgLineColor",
                      "lgLineColors", 1)
    _set_mono_default(rlist, "lgMonoLineDashSegLen", "lgLineDashSegLenF",
                      "lgLineDashSegLens", 0.15)
    _set_mono_default(rlist, "lgMonoLineLabelFontColor",
                      "lgLineLabelFontColor", "lgLineLabelFontColors", 1)
    _set_mono_default(rlist, "lgMonoLineLabelFontHeight",
                      "lgLineLabelFontHeightF", "lgLineLabelFontHeights", 0.01)
    _set_mono_default(rlist, "lgMonoLineThickness", "lgLineThicknessF",
                      "lgLineThicknesses", 1.0)
    _set_mono_default(rlist, "lgMonoMarkerColor", "lgMarkerColor",
                      "lgMarkerColors", 1)
    _set_mono_default(rlist, "lgMonoMarkerIndex", "lgMarkerIndex",
                      "lgMarkerIndexes", 0)
    _set_mono_default(rlist, "lgMonoMarkerSize", "lgMarkerSizeF",
                      "lgMarkerSizes", 0.01)
    _set_mono_default(rlist, "lgMonoMarkerThickness", "lgMarkerThicknessF",
                      "lgMarkerThicknesses", 1.)
    _set_default(rlist, "lgLineLabelFontColors", rlist["lgLineColors"])