コード例 #1
0
ファイル: graph.py プロジェクト: visad/visad
def contour(data,
            panel=None,
            enableLabels=1,
            interval=None,
            width=400,
            height=400,
            title="VisAD Contour Plot"):
    """
  Quick plot of a contour (isopleth) from <data>.  <panel> is the name
  of a panel to put this into (default= make a new one),
  <enableLabels> controls whether the contour lines will be labelled,
  <interval[4]> is a list containing the contour interval info
  (interval, minimum, maximum, base), <width> and <height> are the
  dimensions, <title> is the phrase for the title bar.  Returns a
  reference to the display.

  """
    if isinstance(data, PyList) or isinstance(data, PyTuple):
        data = field(data)

    ndom = domainDimension(data)
    if ndom != 2:
        print "domain dimension must be 2!"
        return None

    dom_1 = RealType.getRealType(domainType(data, 0))
    dom_2 = RealType.getRealType(domainType(data, 1))
    rng = RealType.getRealType(rangeType(data, 0))
    rngMap = ScalarMap(rng, Display.IsoContour)
    xMap = ScalarMap(dom_1, Display.XAxis)
    yMap = ScalarMap(dom_2, Display.YAxis)
    maps = (xMap, yMap, rngMap)

    disp = subs.makeDisplay(maps)
    ci = rngMap.getControl()
    ci.enableLabels(enableLabels)
    if interval is not None:
        ci.setContourInterval(interval[0], interval[1], interval[2],
                              interval[3])

    dr = subs.addData("contours", data, disp)
    subs.setBoxSize(disp, .80)
    subs.setAspectRatio(disp, float(width) / float(height))
    subs.showDisplay(disp, width, height, title, None, None, panel)

    return disp
コード例 #2
0
ファイル: graph.py プロジェクト: visad/visad
def image(data,
          panel=None,
          colortable=None,
          width=400,
          height=400,
          title="VisAD Image"):
    """
  Display an image with a gray scale color mapping.  <data> contains
  the image, <panel> is the name of a panel to put this into (default=
  make a new one), <colortable> is a color table to use (def = gray
  scale), <width> and <height> are the dimensions.  <title> is the
  phrase for the title bar.  Returns a reference to the display.
  """
    if isinstance(data, PyList) or isinstance(data, PyTuple):
        data = field(data)

    dom_1 = RealType.getRealType(domainType(data, 0))
    dom_2 = RealType.getRealType(domainType(data, 1))
    rng = RealType.getRealType(rangeType(data, 0))
    rngMap = ScalarMap(rng, Display.RGB)
    xMap = ScalarMap(dom_1, Display.XAxis)
    yMap = ScalarMap(dom_2, Display.YAxis)
    maps = (xMap, yMap, rngMap)

    #disp = subs.makeDisplay2D(maps)
    disp = subs.makeDisplay(maps)

    if colortable is None:
        # make a gray-scale table
        gray = []
        for i in range(0, 255):
            gray.append(float(i) / 255.)
        colortable = (gray, gray, gray)

    rngMap.getControl().setTable(colortable)

    dr = subs.addData("brightness", data, disp)
    subs.setBoxSize(disp, .80)
    subs.setAspectRatio(disp, float(width) / float(height))
    subs.showDisplay(disp, width, height, title, None, None, panel)
    return disp
コード例 #3
0
ファイル: graph.py プロジェクト: visad/visad
def lineplot(data,
             panel=None,
             color=None,
             width=400,
             height=400,
             title="Line Plot"):
    """
  Quick plot of a line plot from <data>.  <panel> is the name of a
  panel to put this into (default= make a new one), <color> is the
  color to use, <width> and <height> are the dimensions, <title> is
  the phrase for the title bar.  Returns a reference to the display.
  """

    if isinstance(data, PyTuple) or isinstance(data, PyList):
        data = field(data)

    domt = domainType(data)
    rngt = rangeType(data)
    xaxis = ScalarMap(domt[0], Display.XAxis)
    if isinstance(rngt, RealTupleType):
        yaxis = ScalarMap(rngt[0], Display.YAxis)
    else:
        yaxis = ScalarMap(rngt, Display.YAxis)

    axes = (xaxis, yaxis)

    disp = subs.makeDisplay(axes)
    constmap = subs.makeColorMap(color)

    dr = subs.addData("Lineplot", data, disp, constmap)
    subs.setBoxSize(disp, .70)
    showAxesScales(disp, 1)
    setAxesScalesFont(axes, Font("Monospaced", Font.PLAIN, 18))

    subs.setAspectRatio(disp, float(width) / float(height))
    subs.showDisplay(disp, width, height, title, None, None, panel)

    return disp
コード例 #4
0
ファイル: graph.py プロジェクト: visad/visad
def animation(data, width=400, height=500, title="VisAD Animation"):
    """
  Quick plot of an animation.  <data> is a list/tuple of iamges to
  animate.  <width> and <height> are the size, and <title> is the
  label for the titlebar.  Returns a reference to the display.
  """

    num_frames = len(data)

    frames = RealType.getRealType("frames")
    frames_type = RealTupleType(frames)

    image_type = data[0].getType()
    ndom = domainDimension(data[0])

    if ndom != 2:
        print "domain dimension must be 2!"
        return None

    dom_1 = RealType.getRealType(domainType(data[0], 0))
    dom_2 = RealType.getRealType(domainType(data[0], 1))

    nrng = rangeDimension(data[0])
    if (nrng != 3) and (nrng != 1):
        print "range dimension must be 1 or 3"
        return None

    # now create display scalar maps
    maps = None
    rng_1 = rangeType(data[0], 0)
    if nrng == 3:
        rng_2 = rangeType(data[0], 1)
        rng_3 = rangeType(data[0], 2)
        rng_red = None
        if (rng_1 == "Red"): rng_red = rng_1
        if (rng_2 == "Red"): rng_red = rng_2
        if (rng_3 == "Red"): rng_red = rng_3
        rng_green = None
        if (rng_1 == "Green"): rng_green = rng_1
        if (rng_2 == "Green"): rng_green = rng_2
        if (rng_3 == "Green"): rng_green = rng_3
        rng_blue = None
        if (rng_1 == "Blue"): rng_blue = rng_1
        if (rng_2 == "Blue"): rng_blue = rng_2
        if (rng_3 == "Blue"): rng_blue = rng_3

        if (rng_red is None) or (rng_green is None) or (rng_blue is None):
            print "3 Range components must be Red, Green and Blue"

        else:
            maps = subs.makeMaps(dom_1, "x", dom_2, "y",
                                 RealType.getRealType(rng_red), "red",
                                 RealType.getRealType(rng_green), "green",
                                 RealType.getRealType(rng_blue), "blue")

    else:
        maps = subs.makeMaps(dom_1, "x", dom_2, "y",
                             RealType.getRealType(rng_1), "rgb")

    frame_images = FunctionType(frames_type, image_type)
    frame_set = makeDomain(frames, 0, num_frames - 1, num_frames)
    frame_seq = FieldImpl(frame_images, frame_set)

    for i in range(0, num_frames):
        frame_seq.setSample(i, data[i])

    disp = subs.makeDisplay(maps)
    animap = ScalarMap(frames, Display.Animation)
    disp.addMap(animap)
    refimg = subs.addData("VisAD_Animation", frame_seq, disp)
    widget = AnimationWidget(animap, 500)
    subs.setAspectRatio(disp, float(width) / float(height))
    myAnimFrame(disp, widget, width, height, "Animation")

    return disp
コード例 #5
0
ファイル: graph.py プロジェクト: visad/visad
def histogram(data,
              bins=20,
              width=400,
              height=400,
              title="VisAD Histogram",
              color=None,
              bottom=None,
              top=None,
              panel=None,
              clip=1):
    """
  Quick plot of a histogram from <data>.  <bins> is the number of bins
  to use (def = 20), <panel> is the name of a panel to put this into
  (default= make a new one), <color> is the color to use, <width> and
  <height> are the dimensions, <title> is the phrase for the title
  bar.  Returns a reference to the display.
  """
    if isinstance(data, PyList) or isinstance(data, PyTuple):
        data = field(data)

    from java.lang.Math import abs

    x = []
    y = []

    h = hist(data, [0], [bins])
    dom = getDomain(h)
    d = dom.getSamples()
    step2 = dom.getStep() / 2

    hmin = h[0].getValue()
    hmax = hmin

    for i in range(0, len(h)):
        hval = h[i].getValue()
        if hval < hmin: hmin = hval
        if hval > hmax: hmax = hval

    for i in range(0, len(h)):
        xm = d[0][i] - step2
        xp = d[0][i] + step2
        x.append(xm)
        y.append(hmin)
        x.append(xm)
        hval = h[i].getValue()
        y.append(hval)
        x.append(xp)
        y.append(hval)
        x.append(xp)
        y.append(hmin)

    domt = domainType(h)
    rngt = rangeType(h)

    xaxis = ScalarMap(domt[0], Display.XAxis)
    yaxis = ScalarMap(rngt, Display.YAxis)

    yaxis.setRange(hmin, hmax + abs(hmax * .05))

    disp = subs.makeDisplay((xaxis, yaxis))
    subs.drawLine(disp, (x, y), mathtype=(domt[0], rngt), color=color)
    showAxesScales(disp, 1)
    subs.setBoxSize(disp, .65, clip)
    subs.setAspectRatio(disp, float(width) / float(height))
    subs.showDisplay(disp, width, height, title, bottom, top, panel)

    return disp
コード例 #6
0
ファイル: graph.py プロジェクト: visad/visad
def mapimage(imagedata,
             mapfile="outlsupw",
             panel=None,
             colortable=None,
             width=400,
             height=400,
             lat=None,
             lon=None,
             title="VisAD Image and Map"):
    """
  Display an image with a basemap.  <imagedata> is the image object,
  <mapfile> is the name of the map file to use (def = outlsupw).
  <panel> is the name of a panel to put this into (default= make a new
  one), <colortable> is a color table to use (def = gray scale),
  <width> and <height> are the dimensions.  <lat> and <lon> are
  lists/tuples of the range (min->max) of the domain (def = compute
  them). <title> is the phrase for the title bar.  Returns a reference
  to the display.
  """

    rng = RealType.getRealType(rangeType(imagedata, 0))
    rngMap = ScalarMap(rng, Display.RGB)
    xMap = ScalarMap(RealType.Longitude, Display.XAxis)
    yMap = ScalarMap(RealType.Latitude, Display.YAxis)
    maps = (xMap, yMap, rngMap)
    dom = getDomain(imagedata)
    xc = dom.getX()
    yc = dom.getY()
    xl = len(xc)
    yl = len(yc)
    if xl > 1024 or yl > 1024:
        print "Resampling image from", yl, "x", xl, "to", min(yl,
                                                              1024), "x", min(
                                                                  xl, 1024)
        imagedata = resample(
            imagedata,
            makeDomain(dom.getType(), xc.getFirst(), xc.getLast(),
                       min(xl,
                           1024), yc.getFirst(), yc.getLast(), min(yl, 1024)))

    if lat is None or lon is None:
        c = dom.getCoordinateSystem()
        ll = c.toReference(((0, 0, xl, xl), (0, yl, 0, yl)))
        import java.lang.Double.NaN as missing

        if (min(ll[0]) == missing) or (min(ll[1]) == missing) or (min(
                ll[1]) == max(ll[1])) or (min(ll[0]) == max(ll[0])):
            # compute delta from mid-point...as an estimate
            xl2 = xl / 2.0
            yl2 = yl / 2.0
            ll2 = c.toReference(((xl2, xl2, xl2, xl2 - 10, xl2 + 10),
                                 (yl2, yl2 - 10, yl2 + 10, yl2, yl2)))
            dlon = abs((ll2[1][4] - ll2[1][3]) * xl / 40.) + abs(
                (ll2[0][4] - ll2[0][3]) * yl / 40.)

            dlat = abs((ll2[0][2] - ll2[0][1]) * yl / 40.) + abs(
                (ll2[1][2] - ll2[1][1]) * xl / 40.)

            lonmin = max(-180., min(ll2[1][0] - dlon, min(ll[1])))
            lonmax = min(360., max(ll2[1][0] + dlon, max(ll[1])))

            latmin = max(-90., min(ll2[0][0] - dlat, min(ll[0])))
            latmax = min(90., max(ll2[0][0] + dlat, min(ll[0])))

            xMap.setRange(lonmin, lonmax)
            yMap.setRange(latmin, latmax)
            print "computed lat/lon bounds=", latmin, latmax, lonmin, lonmax

        else:
            xMap.setRange(min(ll[1]), max(ll[1]))
            yMap.setRange(min(ll[0]), max(ll[0]))

    else:
        yMap.setRange(lat[0], lat[1])
        xMap.setRange(lon[0], lon[1])

    disp = subs.makeDisplay(maps)

    if colortable is None:
        # make a gray-scale table
        gray = []
        for i in range(0, 255):
            gray.append(float(i) / 255.)
        colortable = (gray, gray, gray)

    rngMap.getControl().setTable(colortable)
    mapdata = load(mapfile)
    drm = subs.addData("basemap", mapdata, disp)
    dr = subs.addData("addeimage", imagedata, disp)
    subs.setBoxSize(disp, .80, clip=1)
    subs.setAspectRatio(disp, float(width) / float(height))
    subs.showDisplay(disp, width, height, title, None, None, panel)
    return disp
コード例 #7
0
                            Display.Blue), ConstantMap(-.98, Display.ZAxis))

#domain = makeDomain(RealType.Time, date[0].getValue(), date[2].getValue(),3)
domain = makeDomain(RealType.Time, date[0].getValue(), date[9].getValue(), 10)
ftype = FunctionType(RealType.Time, ptdata[0].getType())
field = FieldImpl(ftype, domain)
ftype2 = FunctionType(RealType.Time, img[0].getType())
field2 = FieldImpl(ftype2, domain)

for t in range(10):
    field.setSample(t, ptdata[t])
    field2.setSample(t, img[t])

constImageMap = (ConstantMap(-1.0, Display.ZAxis), )
imgRange = rangeType(img[0])
rngMap = ScalarMap(imgRange[0], Display.RGB)
disp.addMap(rngMap)

gray = []
for i in xrange(255):
    gray.append(float(i) / 255.)
colorTable = (gray, gray, gray)
rngMap.getControl().setTable(colorTable)

addData("winds", field, disp, renderer=BarbRendererJ3D())
addData("basemap", a, disp, constBaseMap)
addData("image", field2, disp, constImageMap, renderer=ImageRendererJ3D())

rw = SelectRangeWidget(maps[6])
aw = AnimationWidget(maps[7], 200)