gpt4 book ai didi

jfreechart - 在 JFreeChart 中为一周的单位创建自定义 DateTickUnitType

转载 作者:行者123 更新时间:2023-12-01 14:20:05 25 4
gpt4 key购买 nike

据我所知,DateTickUnitType 是一个无法在完全替换之外扩展或更改的枚举,它只指定天、月、年、分钟、小时、秒和毫秒的单位,但不是周,尽管有一个TimePeriod 的周类型。

这导致的问题是,当我被迫使用 DAY 刻度单位绘制一周的单个数据点时,与在 DAY 刻度单位或每月数据上绘制每日点相比,我的条形宽度非常窄指向 MONTH 刻度单位。

根据我的数据范围(我以编程方式计算),我创建了具有最合适的 TimePeriod 的 TimeSeriesDataItem:

// create the correct TimeSeriesDataItem based on the gap of this data set
switch (gap) {
case WEEK:
item = new TimeSeriesDataItem(new Week(targetDate.getTime()), dataPoint);
break;
case DAY:
item = new TimeSeriesDataItem(new Day(targetDate.getTime()), dataPoint);
break;
case MONTH:
default:
item = new TimeSeriesDataItem(new Month(targetDate.getTime()), dataPoint);
break;
}

然后在构建图表后,我尝试对其进行自定义,使每个数据点的条形尽可能宽。如果数据是天,则刻度单位是天。如果数据是月,则刻度单位是月。但如果数据以周为单位,那么由于没有周滴答单位,我不得不选择以天或月为单位。

JFreeChart barChart = ChartFactory.createXYBarChart(
model.getTitle(),
model.getDomainTitle(),
true,
model.getRangeTitle(),
dataset,
model.getOrientation() == SimpleBarChartModel.Orientation.VERTICAL ? PlotOrientation.VERTICAL : PlotOrientation.HORIZONTAL,
model.getShowLegend(),
false,
false);

// ...

DateAxis domainAxis = (DateAxis)plot.getDomainAxis();
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
if (model.getDomainLabels() != null && model.getDomainLabels().size() > 1) {
// create three different sets of TickUnits for the three ranges (day, week, month)
// JFreeChart will select the smallest unit that doesn't overlap labels.
TickUnits tickUnits = new TickUnits();
tickUnits.add(new DateTickUnit(DateTickUnitType.MONTH, 1, new SimpleDateFormat("MMM")));
tickUnits.add(new DateTickUnit(DateTickUnitType.DAY, 7, dateFormat));
tickUnits.add(new DateTickUnit(DateTickUnitType.DAY, 1, dateFormat));
domainAxis.setStandardTickUnits(tickUnits);
}
domainAxis.setAutoRange(true);
domainAxis.setVerticalTickLabels(true);
domainAxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);

前者创建非常细的条形图,因为它每个刻度单位绘制 7 列。

有什么方法可以让我为 WEEK 制作一个自定义 DateTickUnitType,这样我每周只绘制一个点而不是 7 个(因为我只有一个数据点)?

最佳答案

对于DynamicTimeSeriesCollection,您可以使用显示的方法添加WEEK here对于 MILLISECOND。另请参阅此跟进 thread ,其中提到了所选期间的倍数。

关于jfreechart - 在 JFreeChart 中为一周的单位创建自定义 DateTickUnitType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8010663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com