Code: Select all
chemfacilities.chem.indiana.edu/facilities/masspec/images/centroid2.jpg
I'm using a Histogram at the moment, but this produces wide bars. What options do I have, or is this not possible with JFreeChart?
Thanks in advance!
Code: Select all
chemfacilities.chem.indiana.edu/facilities/masspec/images/centroid2.jpg
Possibility one: write your own renderer that extends AbstractXYItemRenderer which draws for every xy-point a line from (x,0) to (x,y).dancraggs wrote:Code: Select all
chemfacilities.chem.indiana.edu/facilities/masspec/images/centroid2.jpg
Code: Select all
package mycharts;
import javax.swing.JFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.YIntervalRenderer;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.data.xy.DefaultIntervalXYDataset;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.data.xy.XYDataset;
public class IntervalDemo{
public IntervalDemo() {
JFrame frame = new JFrame("Mass spec demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultYIntervalXYDataset set = new DefaultYIntervalXYDataset();
set.addSeries("measured",new double[][]{{1.0,12.0,300.0},{13.0,148.0,69.0}});
set.addSeries("calc",new double[][]{{1.4,12.4,300.4},{18.0,124.0,64.0}});
XYPlot plot = new XYPlot(set,new NumberAxis("m/z"),new NumberAxis("Counts"),new YIntervalRenderer());
JFreeChart chart = new JFreeChart(plot);
frame.getContentPane().add(new ChartPanel(chart));
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args){
IntervalDemo demo = new IntervalDemo();
}
class DefaultYIntervalXYDataset extends DefaultXYDataset implements IntervalXYDataset{
public DefaultYIntervalXYDataset(){
super();
}
public Number getStartX(int series,int item){
return super.getX(series,item);
}
public Number getEndX(int series,int item){
return super.getX(series,item);
}
public Number getStartY(int series,int item){
return 0;
}
public Number getEndY(int series,int item){
return super.getY(series,item);
}
public double getStartXValue(int series,int item){
return super.getXValue(series,item);
}
public double getEndXValue(int series,int item){
return super.getXValue(series,item);
}
public double getStartYValue(int series,int item){
return 0;
}
public double getEndYValue(int series,int item){
return super.getYValue(series,item);
}
}
}