I'm using jfreechart to draw line chart , I need the line to be drawn from top to bottom .... Meaning: 0,0 coordinates will be in the top-left corner. I was able to do it when I used 'CategoryPlot' just by change 'PlotOrientation' but label on the left became overlap..anyhow, I prefer 'xyplot'
changing 'setInverted' or 'setDomainAxisLocation' did not help
any help will be appreciated
update: I'm reposting my code for better clarity (chart drawing part )
In the first code: I got the needed output as showing here http://i58.tinypic.com/r1fr01.jpg just by passing 'PlotOrientation.HORIZONTAL' in this part, I'm using 'CategoryPlot'
import java.awt.*;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.*;
public class PCategory extends ApplicationFrame
{
public PCategory(String s)
{
super(s);
JPanel jpanel = createDemoPanel();
jpanel.setPreferredSize(new Dimension(300, 200));
setContentPane(jpanel);
}
private static CategoryDataset createDataset()
{
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(0,"Pixels", Integer.toString(0));
defaultcategorydataset.addValue(2,"Pixels", Integer.toString(1));
defaultcategorydataset.addValue(5,"Pixels", Integer.toString(2));
defaultcategorydataset.addValue(10,"Pixels", Integer.toString(3));
defaultcategorydataset.addValue(7,"Pixels", Integer.toString(4));
defaultcategorydataset.addValue(8,"Pixels", Integer.toString(5));
return defaultcategorydataset;
}
private static JFreeChart createChart(CategoryDataset categorydataset)
{
JFreeChart jfreechart = ChartFactory.createLineChart(null, null, null, categorydataset, PlotOrientation.HORIZONTAL, false, true, false);
jfreechart.addSubtitle(new TextTitle("Title"));
CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
categoryplot.setRangePannable(true);
categoryplot.setRangeGridlinesVisible(false);
ChartUtilities.applyCurrentTheme(jfreechart);
LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
lineandshaperenderer.setBaseShapesVisible(true);
lineandshaperenderer.setDrawOutlines(true);
lineandshaperenderer.setUseFillPaint(true);
lineandshaperenderer.setBaseFillPaint(Color.white);
lineandshaperenderer.setSeriesStroke(0, new BasicStroke(3F));
lineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F));
lineandshaperenderer.setSeriesShape(0, new java.awt.geom.Ellipse2D.Double(-5D, -5D, 10D, 10D));
return jfreechart;
}
public static JPanel createDemoPanel()
{
JFreeChart jfreechart = createChart(createDataset());
ChartPanel chartpanel = new ChartPanel(jfreechart);
chartpanel.setMouseWheelEnabled(true);
return chartpanel;
}
public static void main(String args[])
{
PCategory PCategory = new PCategory("PCategory.java");
PCategory.pack();
RefineryUtilities.centerFrameOnScreen(PCategory);
PCategory.setVisible(true);
}
}
In the second code: I didn't get what I need even though I used same data and pass 'PlotOrientation.HORIZONTAL' as showing here http://i57.tinypic.com/11hq9tk.jpg I commented out my approach to solve the problem
import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.*;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class PXYPlot extends ApplicationFrame {
public PXYPlot(String s) {
super(s);
JPanel jpanel = createPanel();
jpanel.setPreferredSize(new Dimension(300, 200));
setContentPane(jpanel);
}
private static XYDataset createDataset() {
XYSeries xyseries = new XYSeries("Pixels", true);
xyseries.add(0, 0);
xyseries.add(2, 1);
xyseries.add(5, 2);
xyseries.add(10, 3);
xyseries.add(7, 4);
xyseries.add(8, 5);
XYSeriesCollection xyseriescollection = new XYSeriesCollection();
xyseriescollection.addSeries(xyseries);
return xyseriescollection;
}
private static JFreeChart createChart(XYDataset xydataset)
{
JFreeChart Mychart = ChartFactory.createXYLineChart(null, null, null, xydataset, PlotOrientation.HORIZONTAL, true, true, false);
XYPlot xyplot = (XYPlot) Mychart.getPlot();
xyplot.setDomainPannable(true);
xyplot.setRangePannable(true);
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) xyplot.getRenderer();
xylineandshaperenderer.setBaseShapesVisible(true);
xylineandshaperenderer.setBaseShapesFilled(true);
/* ----------- this part is my attempt to solve the problem -----
NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();
numberaxis.setInverted(true);
xyplot.setDomainAxisLocation(AxisLocation.TOP_OR_LEFT);
//------------I like XYplot because of the part -----------------
NumberAxis xAxis = new NumberAxis();
xAxis.setTickUnit(new NumberTickUnit(1));
XYPlot plot = (XYPlot) Mychart.getPlot();
plot.setDomainAxis(xAxis);
//-----------------------------
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
*/
return Mychart;
}
public static JPanel createPanel() {
JFreeChart jfreechart = createChart(createDataset());
ChartPanel chartpanel = new ChartPanel(jfreechart);
chartpanel.setMouseWheelEnabled(true);
return chartpanel;
}
public static void main(String args[]) {
PXYPlot PXYPlot = new PXYPlot("PXYPlot.java");
PXYPlot.pack();
RefineryUtilities.centerFrameOnScreen(PXYPlot);
PXYPlot.setVisible(true);
}
}
I need 'XYPlot' because I have a huge amount of data , I think 'CategoryPlot' is not designed for it, beside I have overlapping issue with it. In addition, it needs number of overriding in order to meet my needs