gpt4 book ai didi

java - JFreeChart DateTickUnit 无法正常工作

转载 作者:行者123 更新时间:2023-11-30 04:53:21 25 4
gpt4 key购买 nike

我为用户提供了过滤图表结果的更改能力。例如,用户可以选择显示 2 天的结果。然后 TimeUnitType 是天,timeAmount 是 2。但这不能正常工作。对于这种情况,它必须只是2 厚单位。与第一天相关的日期必须以相关刻度单位显示。与第 2 天相关的其他数据必须以第二个粗单位显示。

例如,默认选择 1 天。它在域轴下显示一条黑线。

Domain Axis view

我选择 1 个月间隔。DomainAxis 不显示任何厚度。

    private void customizeGraphView(JFreeChart chart, TimeUnitType timeUnit, Integer timeAmount) {
CombinedRangeXYPlot combinedPlot = (CombinedRangeXYPlot) chart.getPlot();
@SuppressWarnings("unchecked")
/** read 2 subplot*/
List<XYPlot> subPlots = combinedPlot.getSubplots();
for (int plotIndex = 0; plotIndex < subPlots.size(); plotIndex++) {
/** get plot */
XYPlot plot = subPlots.get(plotIndex);
plot.setDomainGridlinesVisible(false);
// plot.setRangeGridlinesVisible(false);
XYItemRenderer itemRenderer = plot.getRenderer();
/** if line and shape rendere */
if (itemRenderer instanceof StandardXYItemRenderer) {
StandardXYItemRenderer renderer = (StandardXYItemRenderer) itemRenderer;
/** show shapes in time series */
renderer.setBaseShapesVisible(true);
/** fill shapes in time series */
renderer.setBaseShapesFilled(true);
renderer.setBaseFillPaint(Color.BLACK);
// addItemLabels(renderer);
}
/** change DateAxis specific vaues */
DateAxis dateAxis = (DateAxis) plot.getDomainAxis();
/** change Date Axis Time Unit format */
dateAxis.setTickLabelsVisible(true);
/** add severity bar */
if (plotIndex == 0) {
dateAxis.setAutoRange(true);
if(getFirstGraphMinRange() != null && getFirstGraphMaxRange() != null)
{
dateAxis.setRange(getHistoryGraphMinRange(), getHistoryGraphMaxRange());
dateAxis.setTickUnit(new DateTickUnit(getTickUnitType(timeUnit), timeAmount));
}
} else {
dateAxis.setDateFormatOverride(new SimpleDateFormat("HH:mm", Locale.getDefault()));
dateAxis.setRange(getSecondGraphMinRange(), getSecondGraphMaxRange());
dateAxis.setTickUnit(new DateTickUnit(DateTickUnitType.MINUTE, 5));
}
}

}

/**
* @param timeUnit
* @return
*/
private DateTickUnitType getTickUnitType(TimeUnitType timeUnit) {
DateTickUnitType unitType = null;
switch (timeUnit) {
case HOUR:
unitType = DateTickUnitType.HOUR;
break;
case DAY:
unitType = DateTickUnitType.DAY;
break;
case MONTH:
unitType = DateTickUnitType.MONTH;
break;
default:
break;
}
return unitType;
}

最佳答案

很难找到您发布的内容的问题,因为还有其他参数可能会影响该行为。

例如,如果您使用的时间轴排除了某些日期,则可能会解释为什么您看不到刻度。例如,如果您使用 1 个月的刻度单位并使用不包括星期日的时间线,则从星期日开始的所有月份都将没有有刻度。您可以尝试使用包含所有日期的时间线来查看问题是否仍然发生。

编辑

根据您的评论,您尝试将日期范围为几个小时的图表的刻度单位设置为 4 天。我不确定这样的 seutp 的预期行为是什么。如果我在这样的图表上复制这些参数,我也不会在日期轴上看到任何刻度。如果我将刻度单位设置为 10 分钟(例如),我可以再次看到刻度。

我想结论是你的刻度单元必须足够细化,以便图表上至少有 1 个刻度以确保它被看到(换句话说,2 个刻度之间的持续时间必须小于日期范围)。

如果您希望对域轴进行更多控制,您可能更愿意使用自定义 NumberAxis 而不是 DateAxis(例如,请参阅 here)。

关于java - JFreeChart DateTickUnit 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9374540/

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