Sometimes I am getting only one point in a graph to display.
If it is only one point there is no TickUnits,except for really large values.
Second problem when is only one point in a graph zooming is not working correctly and really slow. (Generates exception )
Third one if I even set up number format setNumberFormatOverride, after zooming TickUnits are not displaying in desire format.
Does someone can tell me how to fix these problems or it is better way to submit bugs and wait until they will (or won't) be fixed
package org.noname.graphs;
import java.awt.BorderLayout;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.date.SerialDate;
/**
*
* @author zhudro
*/
public class HorizontalBarChart
{
public static int startX = 0;
public static int startY = 0;
private static void setUpCrossHairProp(JFreeChart chart)
{
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer= (XYLineAndShapeRenderer)plot.getRenderer();
renderer.setSeriesLinesVisible(0,false);
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
DateAxis axis = (DateAxis) plot.getDomainAxis();
NumberAxis numberAxis =(NumberAxis) plot.getRangeAxis();
numberAxis.setNumberFormatOverride(new DecimalFormat("#######.##"));
axis.setDateFormatOverride(new SimpleDateFormat("MM/dd HH:mm"));
}
public static ChartPanel panel1;
public JFreeChart chart1;
public static void main(String[] args)
{
final HorizontalBarChart horizontalBarChart = new HorizontalBarChart();
TimeSeries s1 = new TimeSeries("First", Day.class);
//Will display number tick unit
s1.add(new Day(1, SerialDate.MARCH, 2003),111111111111.0234234324);
//Won't display tick units
//Zooing with one point is really slow and incorrect
//s1.add(new Day(1, SerialDate.MARCH, 2003),9989.0234234324);
//s1.add(new Day(1, SerialDate.MARCH, 2003),9978999989.0234234324);
//Two point are always displaying tick units
// s1.add(new Day(5, SerialDate.MARCH, 2003), 2.0234234324);
TimeSeriesCollection dataset1 = new TimeSeriesCollection();
dataset1.addSeries(s1);
horizontalBarChart.chart1 = ChartFactory.createTimeSeriesChart("First Panel\n Second line", "Date", "Price per Unit", dataset1, true, true, false);
horizontalBarChart.panel1 = new ChartPanel(horizontalBarChart.chart1);
setUpCrossHairProp(horizontalBarChart.chart1);
JFrame frame = new JFrame();
frame.setSize(1000, 1000);
frame.setLayout(new BorderLayout());
frame.add( horizontalBarChart.panel1);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Problems with setNumberFormatOverride
-
- Posts: 19
- Joined: Mon Sep 26, 2011 4:48 pm
- antibot: No, of course not.
Problems with setNumberFormatOverride
Last edited by merlushatrash on Wed Oct 12, 2011 4:42 pm, edited 1 time in total.
-
- Posts: 19
- Joined: Mon Sep 26, 2011 4:48 pm
- antibot: No, of course not.
Re: Problems with setNumberFormatOverride
Exception after zooming with one point in graph.
xception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Requires xLow < xHigh.
at org.jfree.chart.renderer.RendererUtilities.findLiveItemsLowerBound(RendererUtilities.java:75)
at org.jfree.chart.renderer.RendererUtilities.findLiveItems(RendererUtilities.java:261)
at org.jfree.chart.plot.XYPlot.render(XYPlot.java:3729)
at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:3310)
at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1235)
at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1668)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:294)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:642)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:612)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
xception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Requires xLow < xHigh.
at org.jfree.chart.renderer.RendererUtilities.findLiveItemsLowerBound(RendererUtilities.java:75)
at org.jfree.chart.renderer.RendererUtilities.findLiveItems(RendererUtilities.java:261)
at org.jfree.chart.plot.XYPlot.render(XYPlot.java:3729)
at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:3310)
at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1235)
at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1668)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:294)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:642)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:612)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
-
- JFreeChart Project Leader
- Posts: 11734
- Joined: Fri Mar 14, 2003 10:29 am
- antibot: No, of course not.
- Contact:
Re: Problems with setNumberFormatOverride
This is related to the axis trying to determine the 'automatic' range that will incorporate all data points. When there are at least two points, it is easy - we take the min and the max, and add a small margin to ensure that those points are not hard up against the edge of the chart.
But when there is only a single data point, what should be the axis range? Should it be x-1 to x+1? Or x-0.1 to x+0.1? Or...? There's no right answer, so we make it configurable via the ValueAxis.setAutoRangeMinimumSize() method.
But when there is only a single data point, what should be the axis range? Should it be x-1 to x+1? Or x-0.1 to x+0.1? Or...? There's no right answer, so we make it configurable via the ValueAxis.setAutoRangeMinimumSize() method.
David Gilbert
JFreeChart Project Leader
Read my blog
Support JFree via the Github sponsorship program
JFreeChart Project Leader


-
- Posts: 19
- Joined: Mon Sep 26, 2011 4:48 pm
- antibot: No, of course not.
Re: Problems with setNumberFormatOverride
Thanks, for answer.
How I can set up Number format that will be the same even after zooming?
How I can set up Number format that will be the same even after zooming?
-
- Posts: 1634
- Joined: Sat Feb 17, 2007 1:51 pm
Re: Problems with setNumberFormatOverride
The "Number format" won´t change with the zooming if you are using a NumberFormatOverride.
Just check the stack trace and have a look at the code: the error comes from a ValueAxis having the same value for the lower and upper bound.
Re-read Davids post, then try calling ValueAxis.setAutoRangeMinimumSize(1.0);
Just check the stack trace and have a look at the code: the error comes from a ValueAxis having the same value for the lower and upper bound.
Re-read Davids post, then try calling ValueAxis.setAutoRangeMinimumSize(1.0);
-
- Posts: 19
- Joined: Mon Sep 26, 2011 4:48 pm
- antibot: No, of course not.
Re: Problems with setNumberFormatOverride
Thanks for answer. I will try.