Page 1 of 1
candlestick and MondayThroughFridayTimeline
Posted: Sun May 02, 2010 10:54 pm
by hl_107
i was trying to get rid of the gaps(weekends) from a candlestick chart, by
((DateAxis) plot.getDomainAxis()).setTimeline(SegmentedTimeline.newMondayThroughFridayTimeline());
it ran into busy loop or something when the dataset size is more than 70-80. did i miss something or this might be a potential issue with the SegmentedTimeline class? it all works if i don't apply the newMondayThroughFridayTimeline thing.
thanks for your help.
Jeff
Re: candlestick and MondayThroughFridayTimeline
Posted: Wed Dec 01, 2010 10:56 pm
by hl_107
there seems to be a bug in DateAxis.java, at least in my case. i filed a bug to sourceforge.
the following line may adjust the date to a previous hidden date, which can lead to infinite loop.
tickDate = correctTickDateForPosition(tickDate, unit, this.tickMarkPosition);
Code: Select all
protected List refreshTicksHorizontal(Graphics2D g2,
Rectangle2D dataArea, RectangleEdge edge) {
List result = new java.util.ArrayList();
Font tickLabelFont = getTickLabelFont();
g2.setFont(tickLabelFont);
if (isAutoTickUnitSelection()) {
selectAutoTickUnit(g2, dataArea, edge);
}
DateTickUnit unit = getTickUnit();
Date tickDate = calculateLowestVisibleTickValue(unit);
Date upperDate = getMaximumDate();
while (tickDate.before(upperDate)) {
// could add a flag to make the following correction optional...
tickDate = correctTickDateForPosition(tickDate, unit,
this.tickMarkPosition);
long lowestTickTime = tickDate.getTime();
long distance = unit.addToDate(tickDate, this.timeZone).getTime()
- lowestTickTime;
int minorTickSpaces = getMinorTickCount();
if (minorTickSpaces <= 0) {
minorTickSpaces = unit.getMinorTickCount();
}
for (int minorTick = 1; minorTick < minorTickSpaces; minorTick++) {
long minorTickTime = lowestTickTime - distance
* minorTick / minorTickSpaces;
if (minorTickTime > 0 && getRange().contains(minorTickTime)
&& (!isHiddenValue(minorTickTime))) {
result.add(new DateTick(TickType.MINOR,
new Date(minorTickTime), "", TextAnchor.TOP_CENTER,
TextAnchor.CENTER, 0.0));
}
}
if (!isHiddenValue(tickDate.getTime())) {
// work out the value, label and position
String tickLabel;
DateFormat formatter = getDateFormatOverride();
if (formatter != null) {
tickLabel = formatter.format(tickDate);
}
else {
tickLabel = this.tickUnit.dateToString(tickDate);
}
TextAnchor anchor = null;
TextAnchor rotationAnchor = null;
double angle = 0.0;
if (isVerticalTickLabels()) {
anchor = TextAnchor.CENTER_RIGHT;
rotationAnchor = TextAnchor.CENTER_RIGHT;
if (edge == RectangleEdge.TOP) {
angle = Math.PI / 2.0;
}
else {
angle = -Math.PI / 2.0;
}
}
else {
if (edge == RectangleEdge.TOP) {
anchor = TextAnchor.BOTTOM_CENTER;
rotationAnchor = TextAnchor.BOTTOM_CENTER;
}
else {
anchor = TextAnchor.TOP_CENTER;
rotationAnchor = TextAnchor.TOP_CENTER;
}
}
Tick tick = new DateTick(tickDate, tickLabel, anchor,
rotationAnchor, angle);
result.add(tick);
long currentTickTime = tickDate.getTime();
tickDate = unit.addToDate(tickDate, this.timeZone);
long nextTickTime = tickDate.getTime();
for (int minorTick = 1; minorTick < minorTickSpaces;
minorTick++){
long minorTickTime = currentTickTime
+ (nextTickTime - currentTickTime)
* minorTick / minorTickSpaces;
if (getRange().contains(minorTickTime)
&& (!isHiddenValue(minorTickTime))) {
result.add(new DateTick(TickType.MINOR,
new Date(minorTickTime), "",
TextAnchor.TOP_CENTER, TextAnchor.CENTER,
0.0));
}
}
}
else {
tickDate = unit.rollDate(tickDate, this.timeZone);
continue;
}
}
return result;
}
Re: candlestick and MondayThroughFridayTimeline
Posted: Thu Dec 02, 2010 2:50 pm
by skunk
Its a known bug. See this thread for more info and some possible workarounds
http://www.jfree.org/phpBB2/viewtopic.p ... inite+loop
Re: candlestick and MondayThroughFridayTimeline
Posted: Tue Apr 26, 2011 7:10 am
by sutindaya
it ran into busy loop or something when the dataset size is more than 70-80. did i miss something or this might be a potential issue with the SegmentedTimeline class? it all works if i don't apply the newMondayThroughFridayTimeline thing.
_________________________
SEO Manchester
Re: candlestick and MondayThroughFridayTimeline
Posted: Tue Apr 26, 2011 12:53 pm
by itsmaddy
I also wanted to apply MondayThroughFridayTimeline in my project but when i use it hangs.
and if i remove it everything works fine.
Is there any solution to it?