以下のコードで JFreeChart を作成しましたが、Y 軸のマークが切り捨てられます。Y 軸でデータ ポイントが重なっている場合でも、グラフを表示するにはどうすればよいですか? 基本的に、ファイルから Y 軸のポイントを生成する必要があります。適切な範囲が入力され、グラフに表示されます。
private static JFreeChart buildChart(TimeSeriesCollection dataset,
String title, boolean endPoints) throws IOException {
// Create the chart
JFreeChart chart0 = ChartFactory.createTimeSeriesChart(
title, "Hour", "Count", dataset, true, true, false);
// Setup the appearance of the chart
chart0.setBackgroundPaint(Color.white);
XYPlot plot = (XYPlot) chart0.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setAxisOffset(new RectangleInsets(10.0, 10.0, 10.0, 10.0));
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
// Display data points or just the lines?
if (endPoints) {
XYItemRenderer renderer = plot.getRenderer();
if (renderer instanceof StandardXYItemRenderer) {
StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
rr.setBaseShapesVisible(true);
rr.setBaseShapesFilled(true);
rr.setDrawSeriesLineAsPath(true);
rr.setSeriesPaint(0, Color.blue.brighter());
rr.setSeriesVisible(0, true); // default
rr.setSeriesVisibleInLegend(0, true); // default
NumberAxis domainAxis = new NumberAxis();
domainAxis.setUpperMargin(0.15);
domainAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
domainAxis = (NumberAxis) plot.getDomainAxis();
domainAxis = (NumberAxis) plot.getRangeAxis();
domainAxis.setAutoRangeIncludesZero(false);
}
}
// Tell the chart how we would like dates to read
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setAutoRange(true);
//axis.getDefaultAutoRange();
axis.setDateFormatOverride(new SimpleDateFormat("HH:mm"));
try {
ChartUtilities.saveChartAsJPEG(new File("suc.jpg"), 1.0f, chart0, 990, 700);
} catch (IOException e) {
e.printStackTrace();
}
return chart0;
}
以下は作成された画像です。明らかに、Y 軸にオーバーラップが表示されていることがわかります。