在轴jfreechart

时间:2018-09-11 22:26:29

标签: jfreechart

我没有找到解决问题的方法: 我正在尝试制作服务可用性图表。它应该是图表“一段时间内的状态”。对于每个可用性间隔,程序都会创建另一个取决于状态的序列,然后将其添加到数据集中。我选择面积图是因为我需要使其与Nagios系统尽可能相似。

主要问题: x轴上的值以12h间隔显示。我一点都不想要我只想指出某些状态以完整数据开头的格式:yyyy-MM-dd HH:mm:ss。类似于示例:

enter image description here 我尝试使用以下方式更改格式:

dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"));

但随后在x轴上仅显示2个值,所有值都以相同的hh:mm:ss结束,例如12:00:00,如下所示: enter image description here

所以我的问题是如何获取将以适当格式(仅在第一个图表上-某些事件开始的3个日期)仅显示连续提及的x个值的图表,而不会添加标准间隔(例如12h)。 而我的代码:

public class HistogramExample extends ApplicationFrame {
    private static final long serialVersionUID = 1L;

    public HistogramExample(String title) {
        super(title);

    }

    public static void main(String[] args) throws ParseException {

        TimePeriodValuesCollection dataset = new TimePeriodValuesCollection();

        dataset.addSeries(getNewSeries("2018-07-01 02:02:02", "2018-07-31 09:31:39", 3));
        dataset.addSeries(getNewSeries("2018-07-31 09:31:40", "2018-08-05 00:00:00", 1));
        dataset.addSeries(getNewSeries("2018-08-05 00:00:00", "2018-08-07 00:00:00", 3));

        JFreeChart chart = ChartFactory.createXYAreaChart("Test", // Title
                "x-axis", // x-axis Label
                "y-axis", // y-axis Label
                dataset, // Dataset
                PlotOrientation.VERTICAL, // Plot Orientation
                false, // Show Legend
                false, // Use tooltips
                false // Configure chart to generate URLs?
        );
        chart.getPlot().setBackgroundPaint(Color.WHITE);
        XYPlot plot = chart.getXYPlot();
        XYItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(0, Color.green);
        renderer.setSeriesPaint(1, Color.RED);
        renderer.setSeriesPaint(2, Color.green);
        String[] grade = new String[4];
        grade[0] = "Interminate";
        grade[1] = "Unreachable";
        grade[2] = "Down";
        grade[3] = "Up";
        // UP cz0 z 105 CR 255 UKNO C255 Z 100 N 25 Warr czerw 255 ziel 255
        SymbolAxis rangeAxis = new SymbolAxis("", grade);
        rangeAxis.setGridBandsVisible(false);
        rangeAxis.setTickUnit(new NumberTickUnit(1));
        rangeAxis.setRange(0, 3);
        rangeAxis.setAxisLineVisible(false);

        DateAxis dateAxis = new DateAxis();
        dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"));
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);

        dateAxis.setMinimumDate(formatter.parse("2018-07-01 02:02:02"));
        dateAxis.setMaximumDate(formatter.parse("2018-08-07 00:00:00"));
        plot.setDomainAxis(dateAxis);

        plot.setRangeAxis(rangeAxis);
        try {
            ChartUtilities.saveChartAsJPEG(new File("chart.jpg"), chart, 500, 300);
        } catch (IOException e) {
            System.err.println("Problem occurred creating chart.");
        }
    }

    public static TimePeriodValues getNewSeries(String time1, String time2, int val) throws ParseException {

        TimePeriodValues series = new TimePeriodValues("Daily Holding Time");
        java.util.Date date = null;
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ENGLISH);

        date = formatter.parse(time1);
        series.add(new Day(date), val);
        date = formatter.parse(time2);
        series.add(new Day(date), val);

        return series;
    }
}

0 个答案:

没有答案