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