Problems with setNumberFormatOverride

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
merlushatrash
Posts: 19
Joined: Mon Sep 26, 2011 4:48 pm
antibot: No, of course not.

Problems with setNumberFormatOverride

Post by merlushatrash » Wed Oct 12, 2011 4:39 pm

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);
}


}
Last edited by merlushatrash on Wed Oct 12, 2011 4:42 pm, edited 1 time in total.

merlushatrash
Posts: 19
Joined: Mon Sep 26, 2011 4:48 pm
antibot: No, of course not.

Re: Problems with setNumberFormatOverride

Post by merlushatrash » Wed Oct 12, 2011 4:40 pm

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)

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

Re: Problems with setNumberFormatOverride

Post by david.gilbert » Fri Oct 14, 2011 6:13 am

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.
David Gilbert
JFreeChart Project Leader

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

merlushatrash
Posts: 19
Joined: Mon Sep 26, 2011 4:48 pm
antibot: No, of course not.

Re: Problems with setNumberFormatOverride

Post by merlushatrash » Tue Oct 18, 2011 10:48 am

Thanks, for answer.
How I can set up Number format that will be the same even after zooming?

paradoxoff
Posts: 1634
Joined: Sat Feb 17, 2007 1:51 pm

Re: Problems with setNumberFormatOverride

Post by paradoxoff » Tue Oct 18, 2011 11:04 am

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);

merlushatrash
Posts: 19
Joined: Mon Sep 26, 2011 4:48 pm
antibot: No, of course not.

Re: Problems with setNumberFormatOverride

Post by merlushatrash » Thu Oct 27, 2011 9:04 am

Thanks for answer. I will try.

Locked