Я не нашел решения для своей проблемы: я пытаюсь составить график доступности услуг.Это должен быть график «статус за время».Для каждого интервала доступности программа создает другую серию в зависимости от статуса и добавляет ее в набор данных.Я выбрал диаграмму площади, потому что мне нужно сделать ее максимально похожей на систему Nagios.
Основная проблема: значения по оси x отображаются с интервалом 12 часов.Я не хочу этого вообще.Я хочу только указать, когда какой-то статус начинался с полных данных в формате: гггг-мм-дд чч: мм: сс.Как в примере:
Я попытался изменить формат с помощью:
dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"));
, но затем на оси x отображаются только 2 значения, все заканчиваются нато же самое чч: мм: сс, например, 12:00:00, как показано ниже:
Поэтому мой вопрос заключается в том, как получить диаграмму, которая будет отображать только x значений, упомянутых в серии, в надлежащем формате(как на 1-м графике - 3 даты, когда какое-то событие началось) и не будут добавлять стандартные интервалы (например, 12 часов).И мой код:
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;
}
}