Query on Time Series Charts...!

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
Chaitanya
Posts: 4
Joined: Mon Apr 10, 2006 5:13 am

Query on Time Series Charts...!

Post by Chaitanya » Tue Apr 11, 2006 5:25 am

Hi,
I am displaying a time series chart and a bar chart in the same chart, in this case I a musing CombinedDomainXYPlot for placing the timeseries chart and bar chart; what is happening in this case is that the values in the X-axis are not repeating themselves for both the charts, how can I do so?

thanks.

david.gilbert
JFreeChart Project Leader
Posts: 11734
Joined: Fri Mar 14, 2003 10:29 am
antibot: No, of course not.
Contact:

Post by david.gilbert » Tue Apr 11, 2006 9:00 pm

I'm not sure what you mean - can you post a screenshot or the source code for a small self-contained demo?
David Gilbert
JFreeChart Project Leader

:idea: Read my blog
:idea: Support JFree via the Github sponsorship program

Chaitanya
Posts: 4
Joined: Mon Apr 10, 2006 5:13 am

RE:Query on Time Series Charts...!

Post by Chaitanya » Wed Apr 12, 2006 5:14 am

Hi Gilbert,
thanks for resonding, the code segment is as below.
Here you will see the values in X-axis Jan , Feb, Mar so on... are appearing in the sub plot below and not in the subplot above.

//// START O CODE /////////

package chartDemo;


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Stroke;
import java.text.SimpleDateFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItem;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.CandlestickRenderer;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.StrokeSample;
import org.jfree.ui.TextAnchor;

import java.awt.geom.Point2D;

public class Chart extends ApplicationFrame {

public Chart(final String title) {

super(title);

final JFreeChart chart = createCombinedChart();
final ChartPanel panel = new ChartPanel(chart, true, true, true, false,
true);
panel.setPreferredSize(new java.awt.Dimension(430, 301));
setContentPane(panel);

}

private JFreeChart createCombinedChart() {
DateAxis da = new DateAxis();

da.setTickMarkOutsideLength(1);
da.setTickLabelFont(new Font("Arial", Font.PLAIN, 10));
//RectangleInsets ri = new RectangleInsets(0,0,10,0);
//da.setTickLabelInsets(ri);


da.setTickMarkPosition(DateTickMarkPosition.END);
da.setAutoRange(true);
da.setDateFormatOverride(new SimpleDateFormat("MMM"));
da.setTickMarkPosition(DateTickMarkPosition.END);
RectangleInsets objRect = new RectangleInsets(0,0,0,20);
da.setLabelInsets(objRect);

da.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1));

da.setAutoTickUnitSelection(true,true);
da.setAutoTickUnitSelection(true);
da.setTickLabelInsets(new RectangleInsets(0,0,0,0));
da.setAxisLineVisible(true);
da.setTickLabelsVisible(true);

// create subplot 1...
final XYDataset data1 = tempcreateDataset(0, 10);
final XYItemRenderer renderer1 = new StandardXYItemRenderer();
//By Chaitanya, to set the color of the series to a default value.
//the first series will have Blue and Magenta respectively.
Color objColor = new Color(4,166,224);
renderer1.setSeriesPaint(0, objColor);
renderer1.setSeriesPaint(1, Color.MAGENTA);


ItemLabelPosition objItemLabelPosition = new ItemLabelPosition(ItemLabelAnchor.INSIDE1,TextAnchor.BOTTOM_CENTER);
renderer1.setBasePositiveItemLabelPosition(objItemLabelPosition,true);
renderer1.setSeriesPositiveItemLabelPosition(0,objItemLabelPosition);
final NumberAxis rangeAxis1 = new NumberAxis("");
rangeAxis1.setTickMarkPaint(Color.black);
rangeAxis1.setAutoRange(true);
rangeAxis1.setTickMarkOutsideLength(1);

//Importnat by Chaitanya 10/04/2006.
//This line of code will have the Y co-ordinate of origin having
//the minimum value of the Y-axis values.
rangeAxis1.setAutoRangeIncludesZero(true);

final XYPlot subplot1 = new XYPlot(data1, da, rangeAxis1, renderer1);
subplot1.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);
subplot1.setDomainGridlineStroke(new BasicStroke(1.0F));
subplot1.setRangeGridlineStroke(new BasicStroke(1.0F));
subplot1.clearRangeMarkers();


final XYDataset data2 = tempcreateDataset(10000000, 10000000);
final XYItemRenderer renderer2 = new XYBarRenderer();
//By Chaitanya to set the colors of the Bar Chart,
// the bar chart will have the color as Black & the second as Yellow.
renderer2.setSeriesPaint(0,Color.black);
renderer2.setSeriesPaint(1,Color.YELLOW);
//CandlestickRenderer renderer2 = new CandlestickRenderer();

final NumberAxis rangeAxis2 = new NumberAxis("");
rangeAxis2.setTickMarkPaint(Color.black);
rangeAxis1.setAutoRange(true);
final XYPlot subplot2 = new XYPlot(data2, da, rangeAxis2, renderer2);
rangeAxis2.setRange(0, 15000000);
rangeAxis2.setTickMarkOutsideLength(1);
subplot2.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
subplot2.setDomainGridlineStroke(new BasicStroke(1.0F));
subplot2.setRangeGridlineStroke(new BasicStroke(1.0F));

// create a parent plot...
final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(da);
plot.setGap(30.0);

// add the subplots...
//plot.setDomainAxis(1,da,true);
//plot.setDomainAxis(0,da,true);



plot.add(subplot2, 1);
plot.add(subplot1, 1);


plot.setOrientation(PlotOrientation.VERTICAL);
plot.setBackgroundAlpha(0);

final JFreeChart chart = new JFreeChart("",
JFreeChart.DEFAULT_TITLE_FONT, plot, true);

chart.setBackgroundPaint(Color.white);

LegendTitle lt = chart.getLegend();
lt.setPosition(RectangleEdge.TOP);
lt.setHorizontalAlignment(HorizontalAlignment.LEFT);
lt.setMargin(0, 20, 0, 0);
lt.setBorder(0, 0, 0, 0);

return chart;
}

private XYDataset tempcreateDataset(double value, int v){
TimeSeriesCollection dataSet = new TimeSeriesCollection();
dataSet.addSeries(createDataset(value,v));
dataSet.addSeries(createDataset(value+3,v+3));

return dataSet;
}

private TimeSeries createDataset(double value, int v) {
System.out.println("Inside createDataSet...");
final TimeSeries series = new TimeSeries("ABBN.VX", Month.class);

Month current = new Month(1, 2006);
for (int i = 0; i < 10; i++) {
try {
value = value + (Math.random() - 0.5) * v;
System.out.println("The Values generated are :"+value);
if (value < 0)
value = value * (-1);
series.add(current, new Double(value));
current = (Month) current.next();
} catch (SeriesException e) {
System.err.println("Error adding to series");
e.printStackTrace();
}
}

//final TimeSeriesCollection dataset = new TimeSeriesCollection();

//dataset.addSeries(series);

return series;
}

public static void main(final String[] args) {

final String title = "Stock market charts prototype";
final Chart demo = new Chart(title);
demo.pack();
RefineryUtilities.positionFrameRandomly(demo);
demo.setVisible(true);

}

}

class DerPoint2D extends Point2D{

public double getX(){
return 0;
}
public double getY(){
return 0;
}

public void setLocation(double dblXcord, double dblYcord){
Double dbl = new Double();
dbl.setLocation(dblXcord, dblYcord);
}


}


//////// END OF CODE////////


thanks and regards,
Ch.Chaitanya.[/img]

Chaitanya
Posts: 4
Joined: Mon Apr 10, 2006 5:13 am

Query on Time Series Charts...! URGENT...

Post by Chaitanya » Thu Apr 13, 2006 5:51 am

Hi Gilbert,
Its very urgent for me to fix this prob. if possible please give me sol as early as possible.
Here you will see the values in X-axis as Jan , Feb, Mar so on... are appearing in the sub plot below and not in the subplot above.
how do I acheive this???
Please help...

//// START O CODE /////////

package chartDemo;


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Stroke;
import java.text.SimpleDateFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItem;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.CandlestickRenderer;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.StrokeSample;
import org.jfree.ui.TextAnchor;

import java.awt.geom.Point2D;

public class Chart extends ApplicationFrame {

public Chart(final String title) {

super(title);

final JFreeChart chart = createCombinedChart();
final ChartPanel panel = new ChartPanel(chart, true, true, true, false,
true);
panel.setPreferredSize(new java.awt.Dimension(430, 301));
setContentPane(panel);

}

private JFreeChart createCombinedChart() {
DateAxis da = new DateAxis();

da.setTickMarkOutsideLength(1);
da.setTickLabelFont(new Font("Arial", Font.PLAIN, 10));
//RectangleInsets ri = new RectangleInsets(0,0,10,0);
//da.setTickLabelInsets(ri);


da.setTickMarkPosition(DateTickMarkPosition.END);
da.setAutoRange(true);
da.setDateFormatOverride(new SimpleDateFormat("MMM"));
da.setTickMarkPosition(DateTickMarkPosition.END);
RectangleInsets objRect = new RectangleInsets(0,0,0,20);
da.setLabelInsets(objRect);

da.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1));

da.setAutoTickUnitSelection(true,true);
da.setAutoTickUnitSelection(true);
da.setTickLabelInsets(new RectangleInsets(0,0,0,0));
da.setAxisLineVisible(true);
da.setTickLabelsVisible(true);

// create subplot 1...
final XYDataset data1 = tempcreateDataset(0, 10);
final XYItemRenderer renderer1 = new StandardXYItemRenderer();
//By Chaitanya, to set the color of the series to a default value.
//the first series will have Blue and Magenta respectively.
Color objColor = new Color(4,166,224);
renderer1.setSeriesPaint(0, objColor);
renderer1.setSeriesPaint(1, Color.MAGENTA);


ItemLabelPosition objItemLabelPosition = new ItemLabelPosition(ItemLabelAnchor.INSIDE1,TextAnchor.BOTTOM_CENTER);
renderer1.setBasePositiveItemLabelPosition(objItemLabelPosition,true);
renderer1.setSeriesPositiveItemLabelPosition(0,objItemLabelPosition);
final NumberAxis rangeAxis1 = new NumberAxis("");
rangeAxis1.setTickMarkPaint(Color.black);
rangeAxis1.setAutoRange(true);
rangeAxis1.setTickMarkOutsideLength(1);

//Importnat by Chaitanya 10/04/2006.
//This line of code will have the Y co-ordinate of origin having
//the minimum value of the Y-axis values.
rangeAxis1.setAutoRangeIncludesZero(true);

final XYPlot subplot1 = new XYPlot(data1, da, rangeAxis1, renderer1);
subplot1.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);
subplot1.setDomainGridlineStroke(new BasicStroke(1.0F));
subplot1.setRangeGridlineStroke(new BasicStroke(1.0F));
subplot1.clearRangeMarkers();


final XYDataset data2 = tempcreateDataset(10000000, 10000000);
final XYItemRenderer renderer2 = new XYBarRenderer();
//By Chaitanya to set the colors of the Bar Chart,
// the bar chart will have the color as Black & the second as Yellow.
renderer2.setSeriesPaint(0,Color.black);
renderer2.setSeriesPaint(1,Color.YELLOW);
//CandlestickRenderer renderer2 = new CandlestickRenderer();

final NumberAxis rangeAxis2 = new NumberAxis("");
rangeAxis2.setTickMarkPaint(Color.black);
rangeAxis1.setAutoRange(true);
final XYPlot subplot2 = new XYPlot(data2, da, rangeAxis2, renderer2);
rangeAxis2.setRange(0, 15000000);
rangeAxis2.setTickMarkOutsideLength(1);
subplot2.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
subplot2.setDomainGridlineStroke(new BasicStroke(1.0F));
subplot2.setRangeGridlineStroke(new BasicStroke(1.0F));

// create a parent plot...
final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(da);
plot.setGap(30.0);

// add the subplots...
//plot.setDomainAxis(1,da,true);
//plot.setDomainAxis(0,da,true);



plot.add(subplot2, 1);
plot.add(subplot1, 1);


plot.setOrientation(PlotOrientation.VERTICAL);
plot.setBackgroundAlpha(0);

final JFreeChart chart = new JFreeChart("",
JFreeChart.DEFAULT_TITLE_FONT, plot, true);

chart.setBackgroundPaint(Color.white);

LegendTitle lt = chart.getLegend();
lt.setPosition(RectangleEdge.TOP);
lt.setHorizontalAlignment(HorizontalAlignment.LEFT);
lt.setMargin(0, 20, 0, 0);
lt.setBorder(0, 0, 0, 0);

return chart;
}

private XYDataset tempcreateDataset(double value, int v){
TimeSeriesCollection dataSet = new TimeSeriesCollection();
dataSet.addSeries(createDataset(value,v));
dataSet.addSeries(createDataset(value+3,v+3));

return dataSet;
}

private TimeSeries createDataset(double value, int v) {
System.out.println("Inside createDataSet...");
final TimeSeries series = new TimeSeries("ABBN.VX", Month.class);

Month current = new Month(1, 2006);
for (int i = 0; i < 10; i++) {
try {
value = value + (Math.random() - 0.5) * v;
System.out.println("The Values generated are :"+value);
if (value < 0)
value = value * (-1);
series.add(current, new Double(value));
current = (Month) current.next();
} catch (SeriesException e) {
System.err.println("Error adding to series");
e.printStackTrace();
}
}

//final TimeSeriesCollection dataset = new TimeSeriesCollection();

//dataset.addSeries(series);

return series;
}

public static void main(final String[] args) {

final String title = "Stock market charts prototype";
final Chart demo = new Chart(title);
demo.pack();
RefineryUtilities.positionFrameRandomly(demo);
demo.setVisible(true);

}

}

class DerPoint2D extends Point2D{

public double getX(){
return 0;
}
public double getY(){
return 0;
}

public void setLocation(double dblXcord, double dblYcord){
Double dbl = new Double();
dbl.setLocation(dblXcord, dblYcord);
}


}



thanks and regards,
Ch.Chaitanya.

Locked