jfreechart - How can we make x and y axis have the same autogen tick marks -


we using jfreechart generate xy plot. plot made "square", min , max range of x , y axis set same.

we not know before hand data like, don't have guesses tick mark intervals should be. automatic tick marks produced pretty good, want keep relying on that. our issue sometimes, not always, sets different tick marks on x axis y axis. example tick mark interval may every 0.1 on x-axis, every 0.05 on y-axis. them same.

we think because using auto generated tick marks these not available until plot rendered, , such have code seems work (posted below). our question: maybe isn't case , can access tick marks earlier. or maybe there better way.

snips of our code shown below:

// generate data series dataset = generatedata();  // create scatter plot jfreechart xychart = chartfactory.createscatterplot(                 title,                 xaxislabel,                 yaxislabel,                 dataset,                 orientation,                 showlegend,generatetooltips,generateurls);  // minor chart formatting here xyplot plot = xychart.getxyplot(); dochartformatting(plot);  // make x , y domain axis symmetric.  find largest x or y point , make domains bit larger figure. double maxdomain = math.max(maxabsx, maxabsy) * 1.10; double mindomain = -1 * maxdomain; plot.getdomainaxis().setrange(mindomain, maxdomain); plot.getrangeaxis().setrange(mindomain, maxdomain);  // make x , y axis have same tick marks.  need in round way automatic tick marks // not generated until chart rendered (we think). // add event listener fires once chart has finished drawing, @ stage auto tick marks have // been determined.  copy x tick marks y axis.  next time chart drawn use these matching // tick marks. // trick dummy draw of chart first can tick marks, , real draw // file after that. xychart.addprogresslistener(chartprogressevent -> {             if (chartprogressevent.gettype() == chartprogressevent.drawing_finished) {                 numberaxis domainnumberaxis = (numberaxis) plot.getdomainaxis();                 numberaxis rangenumberaxis = (numberaxis) plot.getrangeaxis();                 numbertickunit domaintickunit = domainnumberaxis.gettickunit();                 // set auto tick marks x axis onto y axis.  set onto x axis again                 // in guarantee auto tick mark drawing wont change between renders.                 rangenumberaxis.settickunit(domaintickunit);                 domainnumberaxis.settickunit(domaintickunit);             }         }); try {        // write chart output stream gets thrown away, trigger drawing_finished event        chartutilities.writechartaspng(new bytearrayoutputstream(), xychart, 500, 500); } catch (ioexception e) {        // here }  //  real save of chart file chartfile = filename.tofile(); try {       chartutilities.savechartaspng(chartfile, xychart, 500, 500);       return chartfile; } catch (exception e) {       // here } 

all appreciated


Comments