我没有找到解决问题的方法: 我正在尝试制作服务可用性图表。它应该是图表“一段时间内的状态”。对于每个可用性间隔,程序都会创建另一个取决于状态的序列,然后将其添加到数据集中。我选择面积图是因为我需要使其与Nagios系统尽可能相似。
主要问题: x轴上的值以12h间隔显示。我一点都不想要我只想指出某些状态以完整数据开头的格式:yyyy-MM-dd HH:mm:ss。类似于示例:
dateAxis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"));
但随后在x轴上仅显示2个值,所有值都以相同的hh:mm:ss结束,例如12:00:00,如下所示:
所以我的问题是如何获取将以适当格式(仅在第一个图表上-某些事件开始的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;
}
}