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.
Hi Celine- Attached is a program that lets the user switch between log and non-log Y axis. It's based on the LogTest file I sent you earlier off list. Note that as before you need to explicitly set the range for the logMap. I'm not sure why it doesn't autoscale. Hope it helps. Don Don Murray wrote:
Hi Celine- I'm travelling and don't have time to do this justice, but here's my take on it. I have not been able to follow your code in detail, but here's my take on it. You have some X or Y values. You can use X or Y for those real types. For the Log values, you can create a RealType (e.g. LogX, LogY) which is used for the reference realtype of the LogCoordinateSystem. VisAD automatically does the calculations converting the values to the log values. What you have below looks like you are trying to go the other way. Your Integer1DSet has index as the reference of the CS so values of 0,1,2,3 will get converted to the log of those values when index is mapped to a scale. I would think you would want it the other way. Another question is are you removing the non-log scalar maps when you switch to log displays and vice-versa? Again, I'm travelling so may not answer until I get back. Don Celine Gestas wrote:Thank you for your answer but there is no change : points are displayed butnot in the log scale, it keeps the default scale. What I changed is : index = RealType.getRealType("index", CommonUnit.promiscuous); indexLog = RealType.getRealType("indexLog", CommonUnit.promiscuous); // new RealType referenceIndex = new RealTupleType(index); LogCoordinateSystem logCSindex = new LogCoordinateSystem(referenceIndex, base);rangeIndex = new RealTupleType(indexLog, logCSindex, null); // use the new RealTypeindex_set = new Integer1DSet(rangeIndex, x_vals[0].length, logCSindex, null, null); 2007/3/26, Bill Hibbard <hiding@xxxxxxxxx>:Hi Celine, If someone has an idea ... RealTupleType rangeIndex = null; // create the index if (log.equals("logX") || log.equals("logY") ||log.equals("loglog")) {index = RealType.getRealType("index", CommonUnit.promiscuous);RealTupleType referenceIndex = new RealTupleType(index); LogCoordinateSystem logCSindex = new LogCoordinateSystem(referenceIndex, base); rangeIndex = new RealTupleType(index, logCSindex, null); index_set = new Integer1DSet(rangeIndex, x_vals[0].length, logCSindex, null, null); } I think the problem is that the RealTupleTypes referenceIndex and rangeIndex are both defined as (index), that is they are both a RealTupleType of the same single RealType. This may also explain the very mysterious Exception you reported in your other recentmessage to the list. Try using different RealTypes in the constructors forreferenceIndex and rangeIndex. Good luck, Bill -- <http://a8-asy.a8ww.net/a8-ads/adftrclick?redirectid=en-mail_a_01>
-- ************************************************************* Don Murray UCAR Unidata Program dmurray@xxxxxxxxxxxxxxxx P.O. Box 3000 (303) 497-8628 Boulder, CO 80307 http://www.unidata.ucar.edu/staff/donm *************************************************************
import visad.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import visad.java2d.*; import java.util.Hashtable; public class LogDisplay { public LogDisplay(double base) throws VisADException, java.rmi.RemoteException { // Set up the metadata // make a realtype for the values and for log values // create a CS that transforms from values to log values RealType values = RealType.getRealType("Values"); RealType logValues = RealType.getRealType("LogValues", CommonUnit.promiscuous); RealTupleType reference = new RealTupleType(logValues); CoordinateSystem logCS = new LogCoordinateSystem(reference, base); RealTupleType range = new RealTupleType(values, logCS, null); // Create realtype for domain RealType exponent = RealType.getRealType("Exponent"); FunctionType fType = new FunctionType(exponent, range); Integer1DSet domain = new Integer1DSet(exponent, 4); // make a field to hold the data FlatField field = new FlatField(fType, domain); float[][] rangeValues = new float[][] { { 1, 10, 100, 1000 } }; field.setSamples(rangeValues); // Create the display final DisplayImpl display = new DisplayImplJ2D("log display"); display.getGraphicsModeControl().setScaleEnable(true); final ScalarMap yMap = new ScalarMap(values, Display.YAxis); final ScalarMap logMap = new ScalarMap(logValues, Display.YAxis); logMap.setRange(0,3); Hashtable logLabels = new Hashtable(); logLabels.put(new Double(0), "1"); logLabels.put(new Double(1), "10"); logLabels.put(new Double(2), "100"); logLabels.put(new Double(3), "1000"); logMap.getAxisScale().setLabelTable(logLabels); logMap.getAxisScale().setMajorTickSpacing(1); logMap.getAxisScale().setTitle("Log Values"); display.addMap(yMap); display.addMap(new ScalarMap(exponent, Display.XAxis)); DataReference ref = new DataReferenceImpl("ref"); ref.setData(field); display.addReference(ref); JFrame frame = new JFrame("Log Display"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.getContentPane().add(display.getComponent()); JPanel p = new JPanel(); ButtonGroup b = new ButtonGroup(); JRadioButton rb = new JRadioButton("Y",true); b.add(rb); rb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { display.removeMap(logMap); display.addMap(yMap); } catch (Exception ve) { ve.printStackTrace(); } } }); p.add(rb); rb = new JRadioButton("Log Y"); b.add(rb); rb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { display.removeMap(yMap); display.addMap(logMap); } catch (Exception ve) { ve.printStackTrace(); } } }); p.add(rb); frame.getContentPane().add(p, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); } public static void main(String[] args) throws Exception { double base = 10.0; if (args.length > 0) { try { base = Double.parseDouble(args[0]); } catch (Exception e) { base = 10.0; } } LogDisplay lt = new LogDisplay(base); } }
visad
archives: