/* * ------------------------------------------------------------------------- * $Id: BPanel.java,v 1.3 2005/12/30 16:46:52 estewart Exp $ * ------------------------------------------------------------------------- * Copyright (c) 1999 Visual Numerics Inc. All Rights Reserved. * * This software is confidential information which is proprietary to * and a trade secret of Visual Numerics, Inc. Use, duplication or * disclosure is subject to the terms of an appropriate license * agreement. * * VISUAL NUMERICS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE * SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. VISUAL * NUMERICS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR * ITS DERIVATIVES. *-------------------------------------------------------------------------- */ /* * BPanel.java * * Created on September 13, 2004, 6:46 PM */ package com.imsl.demo.heatmaps; import com.imsl.chart.*; import java.util.*; import java.io.*; import java.awt.event.*; import java.awt.Color; public class BPanel extends javax.swing.JPanel implements MouseMotionListener { private Chart chart; private AxisXY axis; private HashMap map; private double[][] data0, data1, data2, plotData; private int[] rows0, cols0, rows1, cols1, rows2, cols2, plotRow, plotCol; private javax.swing.JFrame parentFrame; private final int xMin = 0; private final int xMax = 60; private final int yMin = 0; //private final int yMax = 1000; private final int yMax = 100; /** Creates new form BPanel */ public BPanel(javax.swing.JFrame parent) { this.parentFrame = parent; initComponents(); setPreferredSize(new java.awt.Dimension(parent.getSize().width, (int)(0.85*parent.getSize().height))); setChart(); jPanelChart.setPreferredSize(new java.awt.Dimension(parent.getSize().width, (int)(0.66*parent.getSize().height))); try { getData(); } catch (Exception e) { e.printStackTrace(); } plotData = data0; update(0); } private void setChart() { chart = jPanelChart.getChart(); axis = new AxisXY(chart); axis.setViewport(0.05,0.80,0.05,0.95); // Set axis ranges axis.getAxisX().setAutoscaleInput(AxisXY.AUTOSCALE_OFF); axis.getAxisY().setAutoscaleInput(AxisXY.AUTOSCALE_OFF); axis.getAxisX().setWindow(0.0, xMax-1); axis.getAxisY().setWindow(0.0, yMax-1); axis.getAxisX().getAxisTitle().setTitle(""); axis.getAxisY().getAxisTitle().setTitle(""); axis.getAxisX().setTextColor(Color.white); axis.getAxisY().setTextColor(Color.white); axis.getAxisX().setNumber(7); axis.getAxisX().setDensity(5); axis.getAxisY().setNumber(11); axis.getAxisY().setDensity(5); AxisXY axis2 = new AxisXY(chart); axis2.setViewport(0.05,0.80,0.05,0.95); axis2.getAxisX().setAutoscaleInput(AxisXY.AUTOSCALE_OFF); axis2.getAxisY().setAutoscaleInput(AxisXY.AUTOSCALE_OFF); axis2.getAxisX().setWindow(0.0, xMax-1); axis2.getAxisY().setWindow(0.0, yMax-1); axis2.getAxisX().getAxisTitle().setTitle(""); axis2.getAxisY().getAxisTitle().setTitle(""); axis2.getAxisX().setTextColor(Color.white); axis2.getAxisY().setTextColor(Color.white); axis2.getAxisX().setTickLength(-1); axis2.getAxisY().setTickLength(-1); axis2.getAxisX().setFontSize(0); axis2.getAxisY().setFontSize(0); axis2.getAxisX().setNumber(7); axis2.getAxisX().setDensity(5); axis2.getAxisY().setNumber(11); axis2.getAxisY().setDensity(5); axis2.setCross(xMax-1,yMax-1); // Add MouseMotionListener to the chart. jPanelChart.addMouseMotionListener(this); } // clear and load data sets determined by the menu selection public void getData() throws IOException, java.text.ParseException { rows0 = new int[yMax]; cols0 = new int[xMax]; data0 = new double[xMax][yMax]; rows1 = new int[yMax]; cols1 = new int[xMax]; data1 = new double[xMax][yMax]; rows2 = new int[yMax]; cols2 = new int[xMax]; data2 = new double[xMax][yMax]; // read first data set InputStream is = getClass().getResourceAsStream("simu1.csv"); Reader fr = new InputStreamReader(is); LineNumberReader lnr = new LineNumberReader(fr); int lineNum = 0; while (true) { String line = lnr.readLine(); if (line == null) break; lineNum++; StringTokenizer st = new StringTokenizer(line,","); if (lineNum == 1) { int holder = Integer.valueOf(st.nextToken()).intValue(); for (int i=0; i<xMax; i++) { cols0[i] = Integer.valueOf(st.nextToken()).intValue(); } } else { rows0[yMax+3-lineNum-2] = Integer.valueOf(st.nextToken()).intValue(); for (int i=0; i<xMax; i++) { data0[i][yMax+3-lineNum-2] = Double.valueOf(st.nextToken()).doubleValue(); } } } // read second data set is = getClass().getResourceAsStream("simu1_cluster1.csv"); fr = new InputStreamReader(is); lnr = new LineNumberReader(fr); lineNum = 0; while (true) { String line = lnr.readLine(); if (line == null) break; lineNum++; StringTokenizer st = new StringTokenizer(line,","); if (lineNum == 1) { int holder = Integer.valueOf(st.nextToken()).intValue(); for (int i=0; i<xMax; i++) { cols1[i] = Integer.valueOf(st.nextToken()).intValue(); } } else { rows1[yMax-lineNum+1] = Integer.valueOf(st.nextToken()).intValue(); for (int i=0; i<xMax; i++) { data1[i][yMax-lineNum+1] = Double.valueOf(st.nextToken()).doubleValue(); } } } // read third data set is = getClass().getResourceAsStream("simu1_cluster2.csv"); fr = new InputStreamReader(is); lnr = new LineNumberReader(fr); lineNum = 0; while (true) { String line = lnr.readLine(); if (line == null) break; lineNum++; StringTokenizer st = new StringTokenizer(line,","); if (lineNum == 1) { int holder = Integer.valueOf(st.nextToken()).intValue(); for (int i=0; i<xMax; i++) { cols2[i] = Integer.valueOf(st.nextToken()).intValue(); } } else { rows2[yMax-lineNum+1] = Integer.valueOf(st.nextToken()).intValue(); for (int i=0; i<xMax; i++) { data2[i][yMax-lineNum+1] = Double.valueOf(st.nextToken()).doubleValue(); } } } } // Draw the graph private void drawGraph() { Heatmap heatmap = new Heatmap(axis, 0, xMax-1, 0, yMax-1, -12.0, 12.0, plotData, new MavaColormap()); heatmap.getHeatmapLegend().setPaint(true); heatmap.getHeatmapLegend().setTextFormat("##"); heatmap.getHeatmapLegend().setTitle("Value"); } // Print the details for the current mouse location private void getDetails(int xLoc, int yLoc) { StringBuffer sb = new StringBuffer("\tValue = "+plotData[xLoc][yLoc]+"\n"); sb.append("\tCurrent location = ( "+(xLoc+1)+" , "+(yMax-yLoc)+" )\n"); sb.append("\tOriginal location = ( "+plotCol[xLoc]+" , "+plotRow[yLoc]+" )\n"); displayText.setText(sb.toString()); } // Redraw the chart based on radio button selection. public void update(int dataSet) { if (dataSet == 0) { plotData = data0; plotRow = rows0; plotCol = cols0; jRadioButton1.setSelected(false); jRadioButton2.setSelected(false); } if (dataSet == 1) { plotData = data1; plotRow = rows1; plotCol = cols1; jRadioButton0.setSelected(false); jRadioButton2.setSelected(false); } if (dataSet == 2) { plotData = data2; plotRow = rows2; plotCol = cols2; jRadioButton0.setSelected(false); jRadioButton1.setSelected(false); } drawGraph(); repaint(); } private void initComponents() { jPanelTop = new javax.swing.JPanel(); jPanelLeft = new javax.swing.JPanel(); jPanelRight = new javax.swing.JPanel(); jRadioButton0 = new javax.swing.JRadioButton(); jRadioButton1 = new javax.swing.JRadioButton(); jRadioButton2 = new javax.swing.JRadioButton(); jLabelSelect = new javax.swing.JLabel(); displayText = new javax.swing.JTextArea(6, 20); jPanelChart = new com.imsl.chart.JPanelChart(); setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS)); setPreferredSize(new java.awt.Dimension(500, 600)); jPanelTop.setLayout(new javax.swing.BoxLayout(jPanelTop, javax.swing.BoxLayout.X_AXIS)); jPanelLeft.setLayout(new javax.swing.BoxLayout(jPanelLeft, javax.swing.BoxLayout.Y_AXIS)); jLabelSelect.setText(" Select Data Set: "); jPanelLeft.add(jLabelSelect); jRadioButton0.setText("Original Data"); jRadioButton0.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { update(0); } }); jRadioButton0.setSelected(true); jPanelLeft.add(jRadioButton0); jRadioButton1.setText("One pass"); jRadioButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { update(1); } }); jPanelLeft.add(jRadioButton1); jRadioButton2.setText("Two Passes"); jRadioButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { update(2); } }); jPanelLeft.add(jRadioButton2); displayText.setEditable(false); displayText.setText("\tMove the mouse over the heat map for details."); displayText.setPreferredSize(new java.awt.Dimension(500, 16)); displayText.setBackground(jPanelRight.getBackground()); jPanelRight.add(displayText); jPanelTop.add(jPanelLeft); jPanelTop.add(jPanelRight); add(jPanelTop); jPanelChart.setPreferredSize(new java.awt.Dimension(500, 500)); add(jPanelChart); } // Implement MouseMotionListener public void mouseMoved(MouseEvent e) { double user[] = {0,0}; axis.mapDeviceToUser(e.getX(), e.getY(), user); if ((user[0] < xMin) || (user[0] > xMax) || (user[1] < yMin) || (user[1] > yMax)) { displayText.setText("\tMove the mouse over the heat map for details."); return; } getDetails((int)user[0],(int)user[1]); } public void mouseDragged(MouseEvent e) { } // Variables declaration private javax.swing.JLabel jLabelSelect; private javax.swing.JRadioButton jRadioButton0; private javax.swing.JRadioButton jRadioButton1; private javax.swing.JRadioButton jRadioButton2; private com.imsl.chart.JPanelChart jPanelChart; private javax.swing.JTextArea displayText; private javax.swing.JPanel jPanelTop; private javax.swing.JPanel jPanelLeft; private javax.swing.JPanel jPanelRight; // End of variables declaration private class MavaColormap implements com.imsl.chart.Colormap { int[] c = new int[] {10157607,10092070,10092070,10026534,10026534,10026534,9960998,9960998,9895462,9895462,9895462,9829926,9829926,9764390,9764390,9764390,9698854,9698854,9633318,9633318,9633318,9567782,9567782,9502246,9502246, 9502502,9436709,9371172,9305635,9305634,9240097,9174561,9108768,9108767,9043230,8977693,8912157,8912156,8846619,8780826,8780825,8715289,8649752,8584215,8584214,8518421,8452885,8387348,8387347,8321810, 8256273,8256273,8124944,8059152,7993359,7927567,7861774,7795982,7730189,7664397,7533068,7467276,7401483,7335691,7269898,7204106,7138313,7072521,6941192,6875400,6809607,6743815,6678022,6612230,6546437, 6480645,6415109,6283013,6151173,6084869,5953029,5886725,5754885,5688325,5556485,5490181,5358341,5292037,5160197,5093894,4961798,4829958,4763654,4631814,4565510,4433670,4367110,4235270,4168966,4037126, 3970822,3838982,3772679,3640070,3507718,3375366,3242758,3110406,2978054,2845446,2713094,2580742,2448134,2315782,2183430,2051078,1852934,1786118,1653766,1521158,1388806,1256454,1123846,991494,859142,726534, 594182,461830,329478,656902,984582,1377799,1705479,2098695,2426376,2754056,3147272,3474953,3868169,4195849,4523530,4916746,5244427,5637643,5965323,6293004,6686220,7013900,7407117,7734797,8062477,8455694, 8783374,9176591,9241870,9372942,9504014,9569550,9700622,9831694,9962766,10028302,10159374,10290446,10421518,10487054,10618126,10748941,10814477,10945549,11076621,11207693,11273229,11404301,11535373, 11666445,11731981,11863053,11994125,12125197,12124940,12190476,12256012,12321548,12387084,12452620,12518156,12583692,12649228,12714764,12780300,12845836,12845580,12911116,12976652,13042188,13107724, 13173260,13238796,13304332,13369868,13435404,13500940,13566476,13632012,13697548,13828620,13894156,14025229,14156301,14221837,14352910,14418446,14549518,14680591,14746127,14877199,15008272,15073808, 15204880,15270416,15401489,15532561,15598097,15729170,15794706,15925778,16056851,16122387,16253459,16384532,16384533,16384534,16384791,16384792,16385049,16385050,16450843,16450844,16450845,16451102, 16451103,16451360,16516897,16517154,16517155,16517412,16517413,16517414,16583207,16583208,16583465,16583466,16583723,16583724,16649517}; public java.awt.Color color(double t) { int i = (int)(t*255); return new java.awt.Color(c[i]); } } }