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.
Query on Time Series Charts...!
-
- JFreeChart Project Leader
- Posts: 11734
- Joined: Fri Mar 14, 2003 10:29 am
- antibot: No, of course not.
- Contact:
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
Read my blog
Support JFree via the Github sponsorship program
JFreeChart Project Leader


RE:Query on Time Series Charts...!
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]
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]
Query on Time Series Charts...! URGENT...
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.
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.