logarithm scale issue

Don Murray dmurray at unidata.ucar.edu
Tue Mar 20 08:31:33 MDT 2007


Hi Celine-

When you create the LogCoordinateSystem, you need to specify
a  different RealType as the reference for the system.  Using
x for both the RealTupleType and the reference will not work because
X is in the domain and in the reference, thus the error about
occurring more than once.

Try something like:

         double base = 10;
         RealType x = RealType.getRealType(xAxis);
         RealType logX
             RealType.getRealType("LogX", CommonUnit.promiscuous);
         RealTupleType reference = new RealTupleType(logX);
         CoordinateSystem logCS = new LogCoordinateSystem(reference, base);
         RealTupleType range = new RealTupleType(x, logCS, null);

Don Murray

Celine Gestas wrote:
> Hi all,
> 
> I am working on displaying a logarithm scale on xAxis but I have the
> following error :
> " Single DisplayRealType DisplayXAxis occurs more than once:
> ShadowType.testIndices"
> 
> and I don't understand why... I get X and Y values from a Class but I d 
> like
> to have a logarithm scale just for the xAxis.
> 
> My code is :
> 
> float xMin, xMax, yMax;
>        xMax = getMax(_linePlot.getValues(xAxis));
>        xMin = getMin(_linePlot.getValues(xAxis));
> 
>        yMax = getMax(_linePlot.getValues((String)yAxis.get(0)));
>        for(i=1; i<yAxis.size(); i++) {
>            if (getMax(_linePlot.getValues((String)yAxis.get(i))) > yMax)
>                yMax = getMax(_linePlot.getValues((String)yAxis.get(i)));
>        }
> 
>        /*************************/
>        /* Create the quantities */
>        /*************************/
> 
>        // create the ScalarMaps : quantity x is to be _displayed along
> XAxis and y along YAxis
>        RealType x = RealType.getRealType(xAxis);
>        xMap = new ScalarMap( x, Display.XAxis );
> 
>        RealType y = RealType.getRealType("Y");
>        yMap = new ScalarMap( y, Display.YAxis );
>        yMap.setScaleEnable(true);
>        yMap.setRange(0, yMax);
> 
>        CoordinateSystem logCoord = new LogCoordinateSystem(new
> RealTupleType(x));
>        RealTupleType logX = new RealTupleType(x, logCoord, null);
> 
>        // add them to the display
>        _display.addMap( xMap );
>        _display.addMap( yMap );
> 
> 
>        /*************************/
>        /* Create the quantities */
>        /*************************/
> 
>        // our actual x and y values
>        float[][] x_vals  = _linePlot.getValues(xAxis);
> 
>        // rank the x values
>        for( i = (x_vals[0].length - 1);  i > 0;  i--) {
>            for( int j=0;  j < i; j++) {
>                if (x_vals[0][j] > x_vals[0][j+1]) {
>                    float L_iTemp= x_vals[0][j];
>                    x_vals[0][j]= x_vals[0][j+1];
>                    x_vals[0][j+1]= L_iTemp;
>                }
>            }
>        }
> 
>        // create the index
>        x_set = new Gridded1DSet(logX, x_vals, x_vals[0].length, logCoord,
> null, null);
> 
>        float[][] y_vals = _linePlot.getValues((String) yAxis.get(i));
> 
>        /******************************/
>        /* Code for setting LINE data */
>        /******************************/
> 
>        // create the function to draw the line
>        func_x_y = new FunctionType(logX, y);
> 
>        // associate the function (func_x_y) to the values (x_set)
>        line_ff = new FlatField( func_x_y, x_set);
> 
>        // and put the y values above in it
>        line_ff.setSamples( y_vals );
> 
> 
>        /**************************/
>        /* Initialize the display */
>        /**************************/
> 
>        // create data references and set the FlatFields (association
> function/values) as our datas
>        line_ref = new DataReferenceImpl("line_ref");
>        line_ref.setData( line_ff );
> 
>        _display.addReference( line_ref , lineCMap);
> 
> If someone could help me fixing this ....
> 
> Celine Gestas
> 

-- 
*************************************************************
Don Murray                               UCAR Unidata Program
dmurray at unidata.ucar.edu                        P.O. Box 3000
(303) 497-8628                              Boulder, CO 80307
http://www.unidata.ucar.edu/staff/donm
*************************************************************


==============================================================================
To unsubscribe visad, visit:
http://www.unidata.ucar.edu/mailing-list-delete-form.html
==============================================================================



More information about the visad mailing list