Java JFreeChart数据单元工作不正常

Java JFreeChart数据单元工作不正常,java,jfreechart,Java,Jfreechart,我正在为用户提供过滤图形结果的更改功能。例如,用户可以选择显示2天的结果。然后TimeUnitType为天,timeAmount为2。但这不能正常工作。在这种情况下,它必须只有2个厚单位。与第一天相关的日期必须以相关的勾号单位显示。与第2天相关的另一个数据必须以第二个厚单位显示 例如,默认情况下选择1天。它在域轴下显示一条黑线 我选择1个月的间隔。DomainAxis不显示任何间隔 private void customizeGraphView(JFreeChart chart, Ti

我正在为用户提供过滤图形结果的更改功能。例如,用户可以选择显示2天的结果。然后TimeUnitType为天,timeAmount为2。但这不能正常工作。在这种情况下,它必须只有2个厚单位。与第一天相关的日期必须以相关的勾号单位显示。与第2天相关的另一个数据必须以第二个厚单位显示

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

我选择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;
}
private void customizeGraphView(JFreeChart图表、TimeUnitType timeUnit、整数timeAmount){
CombinedRangeXYPlot combinedPlot=(CombinedRangeXYPlot)chart.getPlot();
@抑制警告(“未选中”)
/**读取2个子批次*/
List subplot=combinedPlot.getsubplot();
对于(int plotIndex=0;plotIndex
很难找到您发布的内容的问题,因为还有其他参数可能会影响该行为

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

编辑

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

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


如果您希望对域轴进行更多控制,您可能更喜欢使用自定义数字轴而不是日期轴(请参见示例)。

我没有使用时间轴。我使用的是带有TimeSeries集合的DateAxis。我有一个问题。如果我将TimeUnit设置为DAY,则时间序列中的所有数据项都必须是new DAY()格式?因此对于TimeUnit MONTH,timeseriesdatatem timeDataItem=new timeseriesdatatem(new Month(new Date(),0.3);我没有看到任何明显的东西……您是否检查(printf)了这两行上的参数值:
dateAxis.setRange(getHistoryGraphMinRange(),getHistoryGraphMaxRange());
dateAxis.settickunitunit(new datetickunittype(时间单位,时间量);
您是否尝试过删除以下
其他
以查看当您仅更改
绘图(0)
和/或将绘图>1的
日期轴设置为绘图(0)的
日期轴时它是否有效?这是println的结果。已正确设置最小日期:Fri Feb 17:36:11 EET 2012年最大日期:Fri Feb 17 18:43:00 EET 2012 DateTickUnitType.DAY 4请编辑您的问题,以包括显示您描述的问题的。