NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

Re: newbie- can I make a bar graph?

Thanks so much! Yes, it does work and it helped me a lot. Thanks again.
:)

-Jen

Ugo Taddei wrote:
> 
> Hi Stewart and hi all,
> 
> I've got some code to draw a 2D display with "bars". I've used
> VisADLineArray rather than VisADQuadArray, because I've got a display
> showing some 365 bars, which are packed up together so closely that one
> don't want them thick. (Thickness is nevertheless controlled with
> constant maps; see code below).
> 
> The idea here is to plot daily precipitation values as "bars" (i.e.
> thick lines).
> 
> So here we go:
> 
> day =   new RealType( "day", null, null );
> precip  =  new RealType( "Precipitation", null, null );
> 
> // the function precip = f( days )
> FunctionType func_Prec = new FunctionType( day , precip );
> 
> // here the day values, as a set, we'll have 365 values
> daySet = (Set) new Linear1DSet(  day  , (float) firstDay, (float)
> lastDay, 365);
> 
> // the flat field
> ff_Prec = new FlatField( func_Prec, daySet );
> 
> // the line array
>  pBars = new VisADLineArray();
> 
> // scalar maps
> xMap    = new  ScalarMap( day, Display.XAxis );
> yMap    = new  ScalarMap( precip, Display.YAxis);
> 
> 
> // more scalar maps: 1st for shaps, and 2nd for shape scale, i.e,
> responsible for sacling the shape according to RealType precip
> 
> pBarMap = new ScalarMap(precip, Display.Shape);
> pBarScaleMap = new ScalarMap(precip, Display.ShapeScale);
> 
> // create a dispay...
> display1 = new DisplayImplJ2D("display1");
> 
> // initalize pBars: 2 vertex (with (x,y,z), where z is ignored)
> pBars.vertexCount=2;
> // and coordinates: draw some "arbitrary" line; it's be scaled according
> to values of RealType precip
> 
> pBars.coordinates = new float[] {0.0f,  0.0f, 0.0f,    0.0f, -0.10f,
> 0.0f};
> 
> // let samples_precip be you precipitatios values:
> 
> float[][] samples_Precip = new float[ 1 ][ 365 ];
> 
> // fill array with values...
> // code to fill array...
> 
> // set samples:
> 
> ff_Prec.setSamples(samples_Precip);
> 
> // adda maps to display:
> 
> display1.addMap( xMap );
> display1.addMap( yMap1);
> display1.addMap(pBarMap);
> display1.addMap(pBarScaleMap);
> 
> // get shapes control:
> 
> ShapeControl scontrol = (ShapeControl) pBarMap.getControl();
> scontrol.setShapeSet(new Integer1DSet(1));  // only one value
> scontrol.setShapes(new VisADGeometryArray[] {pBars});
> 
> // constant map to set bar color and thickness
> 
>         ConstantMap[] PrecMaps = {new ConstantMap(0.20f, Display.Red),
>                            new ConstantMap(0.50f, Display.Green),
>                            new ConstantMap(1.0f, Display.Blue),
>                            new ConstantMap(01.50f, Display.LineWidth)};
> 
> // set reference's data
> refer_Pre = new ReferenceImpl("refer_Pre" );
> 
> refer_Pre.setData( ff_Prec  );
> 
> // add reference to display, using the constant maps
> 
> display1.addReference( refer_Pre, PrecMaps);
> 
> // show display...
> 
> I hope it works, because I cut and pasted the code above from a more
> complex application. You can see the resulting display at:
> 
> http://www.geogr.uni-jena.de/~p6taug/demviewer/more/modv.jpg
> 
> You could also use a Gridded2D (?) set (actually, and array of those),
> which is by far simpler (as Bill said, VisAD sahpes are rather complex:
> some of the credits for code above goes to Bill, anyway; especially the
> magic parts ;-)
> 
> hope it has helped clear up a bit.
> 
> Cheers,
> 
> Ugo


  • 2000 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: