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
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"])