def saveDataGraph1D(f, dg, format = "png", settings=None): usettings = settings if settings is None: usettings = makeDefaultSettings() im = ImageTools.Create.newImage(usettings["size"][0], usettings["size"][1] + usettings["marktopheight"] + usettings["markbottomheight"], usettings["backgroundcolor"]) max = float('-inf') min = float('inf') vals = [] domain = dg.fdomain if usettings["domain"] is not None: if usettings["domain"][0] is None: dmin = dg.fdomain[0] else: dmin = usettings["domain"][0] if usettings["domain"][1] is None: dmax = dg.fdomain[1] else: dmax = usettings["domain"][1] domain = (dmin, dmax) dt = (float(domain[1])-float(domain[0])) / float(usettings["size"][0]) for x in range(usettings["size"][0]): herex = x*dt + domain[0] y = dg.getValue(herex, usettings["interpolation"], usettings["tension"], usettings["bias"]) vals.append(y) if y > max: max = y if y < min: min = y lastval = None for i, y in enumerate(vals): herey = __getImageY(y, usettings["size"][1], min, max) + usettings["marktopheight"] #print(herex, herey) if lastval is not None: ImageTools.Modify.drawLine(im, i-1, lastval, i, herey, usettings["color"]) lastval = herey for mi in dg.minima: m = dg.xvalues[int(mi)] if m >= domain[0] and m <= domain[1]: i = int(Ranges.rangeToRange(float(m), domain[0], domain[1], 0.0, float(usettings["size"][0]-1))) y = vals[i] herey = __getImageY(y, usettings["size"][1], min, max) + usettings["marktopheight"] ImageTools.Modify.drawLine(im, i, herey-usettings["marktopheight"], i, herey+usettings["marktopheight"], usettings["maxcolor"]) for mi in dg.maxima: m = dg.xvalues[int(mi)] if m >= domain[0] and m <= domain[1]: i = int(Ranges.rangeToRange(float(m), domain[0], domain[1], 0.0, float(usettings["size"][0]-1))) y = vals[i] herey = __getImageY(y, usettings["size"][1], min, max) + usettings["marktopheight"] ImageTools.Modify.drawLine(im, i, herey-usettings["marktopheight"], i, herey+usettings["marktopheight"], usettings["maxcolor"]) if usettings["markpoints"]: for m in dg.xvalues: if m >= domain[0] and m <= domain[1]: i = int(Ranges.rangeToRange(float(m), domain[0], domain[1], 0.0, float(usettings["size"][0]-1))) y = vals[i] herey = __getImageY(y, usettings["size"][1], min, max) + usettings["marktopheight"] ImageTools.Modify.drawBox(im, int(i-1), int(herey-1), int(2), int(2), usettings["pointcolor"]) All.save(f, im, format) return
def saveDataGraph1DFile(filename, dg, settings=None): fn = All.getFormatName(filename) f = open(filename, "w") saveDataGraph1D(f, dg, fn, settings) f.close() return