Given below is code of the 2 classes being used. The output image for both the methods is coming out different. I am unable to figure out why? Please suggest.
Thanks,
Kanishk
Code: Select all
import java.awt.Color;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.CombinedDomainCategoryPlot;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
/**
*
*
* @author Kanishk Panwar
*/
public class ImageEngine {
private static int index = 0;
Vector readings[][] = null;
int moteId;
Vector reading[] = null;
/**
* for single mote
*
* @param reading
* @param moteId
*/
public ImageEngine(Vector reading[][], int moteId) {
this.readings = reading;
this.moteId = moteId;
}
/**
*
* @param reading
*/
public ImageEngine(Vector reading[]) {
this.reading = reading;
}
/**
*
* @param reading
* @return
*/
public JFreeChart averageReadingImage() throws IOException {
if (reading == null)
return null;
CategoryAxis domainAxis = new CategoryAxis("Readings");
CombinedDomainCategoryPlot plot = new CombinedDomainCategoryPlot(
domainAxis);
MyDrawingSupplier mySupplier = new MyDrawingSupplier();
plot.setDrawingSupplier(mySupplier);
JFreeChart result = new JFreeChart("Current Status of Sensor Network",
new Font("SansSerif", Font.BOLD, 16), plot, true);
NumberAxis rangeAxis1 = new NumberAxis("Value");
rangeAxis1.setUpperBound(getMax(reading[1])+10);
rangeAxis1.setStandardTickUnits(NumberAxis.createStandardTickUnits());
// LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
MyRenderer renderer1 = new MyRenderer();
renderer1.setItemLabelsVisible(true);
renderer1
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer1
.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer1.setItemLabelsVisible(true);
CategoryPlot temperature = new CategoryPlot(getDataset("Temperature"),
null, rangeAxis1, renderer1);
temperature.setDomainGridlinesVisible(true);
NumberAxis rangeAxis2 = new NumberAxis("Value");
rangeAxis2.setUpperBound(getMax(reading[0])+20);
rangeAxis2.setAutoRangeIncludesZero(false);
rangeAxis2.setStandardTickUnits(NumberAxis.createStandardTickUnits());
MyRenderer renderer2 = new MyRenderer();
renderer2
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer2
.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer2.setItemLabelsVisible(true);
CategoryPlot humidity = new CategoryPlot(getDataset("Humidity"), null,
rangeAxis2, renderer2);
humidity.setDomainGridlinesVisible(true);
NumberAxis rangeAxis3 = new NumberAxis("Value");
rangeAxis3.setUpperBound(getMax(reading[2])+10);
rangeAxis3.setStandardTickUnits(NumberAxis.createStandardTickUnits());
MyRenderer renderer3 = new MyRenderer();
renderer3
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer3
.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer3.setItemLabelsVisible(true);
CategoryPlot light = new CategoryPlot(getDataset("Light"), null,
rangeAxis3, renderer3);
light.setDomainGridlinesVisible(true);
NumberAxis rangeAxis4 = new NumberAxis("Value");
rangeAxis4.setStandardTickUnits(NumberAxis.createStandardTickUnits());
MyRenderer renderer4 = new MyRenderer();
renderer4
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer4
.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer4.setItemLabelsVisible(true);
renderer4.setSeriesFillPaint(3, Color.BLACK);
rangeAxis4.setUpperBound(getMax(reading[3])+10);
CategoryPlot power = new CategoryPlot(getDataset("Power"), null,
rangeAxis4, renderer4);
power.setDomainGridlinesVisible(true);
plot.add(temperature, 1);
plot.add(humidity, 1);
plot.add(light, 1);
plot.add(power, 1);
ChartUtilities.saveChartAsJPEG(new File("c:\\sys.jpg"), result, 600,
800);
return result;
}
/**
*
* @param reading
* @param moteId
* @return
* @throws IOException
*/
public JFreeChart currentMoteReadingImage() throws IOException {
CategoryAxis domainAxis = new CategoryAxis("Readings");
CombinedDomainCategoryPlot plot = new CombinedDomainCategoryPlot(
domainAxis);
MyDrawingSupplier mySupplier = new MyDrawingSupplier();
plot.setDrawingSupplier(mySupplier);
JFreeChart result = new JFreeChart("Current System Reading for MOTE# "
+ moteId, new Font("SansSerif", Font.BOLD, 16), plot, true);
NumberAxis rangeAxis1 = new NumberAxis("Value");
rangeAxis1.setStandardTickUnits(NumberAxis.createStandardTickUnits());
rangeAxis1.setUpperBound(getMax(readings[0][1])+10);
// LineAndShapeRenderer renderer1 = new LineAndShapeRenderer();
MyRenderer renderer1 = new MyRenderer(WSNUtil
.vectorToBoolean(readings[1][1]));
renderer1
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer1
.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer1.setItemLabelsVisible(true);
CategoryPlot temperature = new CategoryPlot(getDataset("Temperature"),
null, rangeAxis1, renderer1);
temperature.setDomainGridlinesVisible(true);
renderer1.setUseFillPaint(true);
renderer1.setUseOutlinePaint(true);
NumberAxis rangeAxis2 = new NumberAxis("Value");
rangeAxis2.setStandardTickUnits(NumberAxis.createStandardTickUnits());
rangeAxis1.setUpperBound(getMax(readings[0][0])+20);
MyRenderer renderer2 = new MyRenderer(WSNUtil
.vectorToBoolean(readings[1][0]));
renderer2
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer2
.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer2.setItemLabelsVisible(true);
CategoryPlot humidity = new CategoryPlot(getDataset("Humidity"), null,
rangeAxis2, renderer2);
humidity.setDomainGridlinesVisible(true);
renderer2.setUseFillPaint(true);
renderer2.setUseOutlinePaint(true);
NumberAxis rangeAxis3 = new NumberAxis("Value");
rangeAxis3.setStandardTickUnits(NumberAxis.createStandardTickUnits());
rangeAxis1.setUpperBound(getMax(readings[0][2])+10);
MyRenderer renderer3 = new MyRenderer(WSNUtil
.vectorToBoolean(readings[1][2]));
renderer3
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer3
.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer3.setItemLabelsVisible(true);
CategoryPlot light = new CategoryPlot(getDataset("Light"), null,
rangeAxis3, renderer3);
light.setDomainGridlinesVisible(true);
renderer3.setUseFillPaint(true);
renderer3.setUseOutlinePaint(true);
NumberAxis rangeAxis4 = new NumberAxis("Value");
rangeAxis4.setStandardTickUnits(NumberAxis.createStandardTickUnits());
rangeAxis1.setUpperBound(getMax(readings[0][3])+10);
MyRenderer renderer4 = new MyRenderer(WSNUtil
.vectorToBoolean(readings[1][3]));
renderer4
.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer4
.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer4.setItemLabelsVisible(true);
renderer4.setSeriesFillPaint(3, Color.BLACK);
CategoryPlot power = new CategoryPlot(getDataset("Power"), null,
rangeAxis4, renderer4);
power.setDomainGridlinesVisible(true);
renderer4.setUseFillPaint(true);
renderer4.setUseOutlinePaint(true);
plot.add(temperature, 1);
plot.add(humidity, 1);
plot.add(light, 1);
plot.add(power, 1);
ChartUtilities.saveChartAsJPEG(new File("c:\\a.jpg"), result, 600, 800);
return result;
}
/**
*
* @param reading
* @param moteId
* @return
*/
public BufferedImage getChartAsBufferedImage() {
try {
return currentMoteReadingImage().createBufferedImage(600, 800);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
*
* @param reading
* @return
*/
private CategoryDataset getDataset(String type) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
Double myReading[] = null;
Vector[] temp = null;
if (reading == null) {
temp = new Vector[4];
temp[0] = readings[0][0];
temp[1] = readings[0][1];
temp[2] = readings[0][2];
temp[3] = readings[0][3];
} else {
temp = reading;
}
if (type.equals("Temperature"))
myReading = WSNUtil.vectorToDouble(temp[1]);
if (type.equals("Humidity"))
myReading = WSNUtil.vectorToDouble(temp[0]);
if (type.equals("Light"))
myReading = WSNUtil.vectorToDouble(temp[2]);
if (type.equals("Power"))
myReading = WSNUtil.vectorToDouble(temp[3]);
for (int i = 0; i < myReading.length; i++) {
dataset.addValue(myReading[i].doubleValue(), type, new Integer(i)
.toString());
}
return dataset;
}
private double getMax(Vector data) {
double val = 0d;
double max = val;
Iterator iter = data.iterator();
while (iter.hasNext()) {
val = ((Double) iter.next()).doubleValue();
if (val > max)
max = val;
}
System.out.println(max);
return max;
}
/**
*
* @param args
*/
public static void main(String[] args) {
Vector[][] temp = new Vector[2][4];
temp[0][0] = new Vector();
temp[0][1] = new Vector();
temp[0][2] = new Vector();
temp[0][3] = new Vector();
temp[1][0] = new Vector();
temp[1][1] = new Vector();
temp[1][2] = new Vector();
temp[1][3] = new Vector();
temp[0][0].add(new Double(80.24));
temp[0][0].add(new Double(80.25));
temp[0][0].add(new Double(80.26));
temp[0][0].add(new Double(80.24));
temp[0][0].add(new Double(90.94));
temp[0][1].add(new Double(49.46));
temp[0][1].add(new Double(49.40));
temp[0][1].add(new Double(49.23));
temp[0][1].add(new Double(49.85));
temp[0][1].add(new Double(49.05));
temp[0][2].add(new Double(3.4));
temp[0][2].add(new Double(3.1));
temp[0][2].add(new Double(3.1));
temp[0][2].add(new Double(3.2));
temp[0][2].add(new Double(3.0));
temp[0][3].add(new Double(3.4));
temp[0][3].add(new Double(3.1));
temp[0][3].add(new Double(3.8));
temp[0][3].add(new Double(3.1));
temp[0][3].add(new Double(3.2));
for(int i=0;i<5;i++) {
temp[1][0].add(new Boolean(true));
temp[1][1].add(new Boolean(true));
temp[1][2].add(new Boolean(true));
temp[1][3].add(new Boolean(true));
}
try {
new ImageEngine(temp,1).currentMoteReadingImage();
} catch (Throwable e) {
e.printStackTrace();
}
Vector[] t = new Vector[4];
t[0] = new Vector();
t[1] = new Vector();
t[2] = new Vector();
t[3] = new Vector();
t[0].add(new Double(80.24));
t[0].add(new Double(80.25));
t[0].add(new Double(80.26));
t[0].add(new Double(80.24));
t[0].add(new Double(90.94));
t[1].add(new Double(49.46));
t[1].add(new Double(49.40));
t[1].add(new Double(49.23));
t[1].add(new Double(49.85));
t[1].add(new Double(49.05));
t[2].add(new Double(3.4));
t[2].add(new Double(3.1));
t[2].add(new Double(3.1));
t[2].add(new Double(3.2));
t[3].add(new Double(3.4));
t[3].add(new Double(3.1));
t[3].add(new Double(3.1));
t[3].add(new Double(3.2));
try {
new ImageEngine(t).averageReadingImage();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
Code: Select all
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.geom.Rectangle2D;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.CategoryItemRendererState;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
/**
*
*
* @author Kanishk Panwar
*/
public class MyRenderer extends LineAndShapeRenderer {
private Boolean[] anomaly;
/**
*
* @param anomaly
*/
public MyRenderer(Boolean[] anomaly) {
super();
this.anomaly = anomaly;
}
/**
*
*
*/
public MyRenderer() {
this(null);
}
/**
*
*/
public void drawItem(Graphics2D g2, CategoryItemRendererState state,
Rectangle2D dataArea, CategoryPlot plot, CategoryAxis domainAxis,
ValueAxis rangeAxis, CategoryDataset dataset, int row, int column,
int pass) {
super.drawItem(g2, state, dataArea, plot, domainAxis, rangeAxis,
dataset, row, column, pass);
}
/**
*
*/
public Paint getItemFillPaint(int series, int item) {
if (anomaly == null)
return super.getItemPaint(series, item);
if (anomaly[item].booleanValue())
return Color.BLACK;
return super.getItemPaint(series, item);
}
}