我有一个时间序列图表,刻度单位是天。当我创建图表时,一切都很好,当数据跨越 8 天或更长时间时。绘制线条并且日期轴上的每个刻度标签显示一天。
但是当数据只包含四天或更少的天数时,Ticks 或 TickLabels 就会重复。所以我在同一天有 2 个刻度。我想说明这一点:
数据跨越 8 天:
标签: 周一,周二,周三,周四,周五,周六,周日,周一,
数据跨越 4 天:
标签:星期一,星期一,星期二,星期二,星期三,星期三,星期四,星期四,星期五
除了减小图表大小以仅使用单个刻度和标签作为日期之外,还有其他方法吗?
private void presentCharts(final MapDataParameter mapDataParameter)
{
if (getRestrictionHistoryMap() != null && !getRestrictionHistoryMap().isEmpty())
{
final JFreeChart restrChart = ChartFactory.createTimeSeriesChart(
X_AXIS_LABEL_TOP,
X_AXIS_LABEL_BOTTOM,
Y_AXIS_LABEL_LEFT,
createCummulatedDataset(),
true,
true,
false);
final XYPlot pplot = restrChart.getXYPlot();
setPlot(pplot);
getPlot().setDataset(1, createCountDataset());
getPlot().mapDatasetToRangeAxis(1, 1);
getPlot().setDomainGridlinesVisible(true);
getPlot().setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
Color plotBackgroundColor = new Color(208, 205, 205);
getPlot().setBackgroundPaint(plotBackgroundColor);
// valueAxis is for cummulated (right y axis)
final ValueAxis valueAxis = new NumberAxis(Y_AXIS_LABEL_RIGHT);
valueAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
getPlot().setRangeAxis(1, valueAxis);
final XYBarRenderer xyBarRenderer = new XYBarRenderer();
getPlot().setDatasetRenderingOrder(DatasetRenderingOrder.REVERSE);
// Hintergrund stylen
Color boundingBackgroundColor = new Color(238, 238, 238);
restrChart.setBackgroundPaint(boundingBackgroundColor);
// Datensätze den renderern zuweisen
final StandardXYItemRenderer standardXyItemRenderer = new StandardXYItemRenderer();
getPlot().setRenderer(0, standardXyItemRenderer);
getPlot().setRenderer(1, xyBarRenderer);
// nur Ganzzahlige Schritte
ValueAxis valueAxis2 = getPlot().getRangeAxis(0);
valueAxis2.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// Datumsformat einstellen
final DateAxis dateAxis = (DateAxis) pplot.getDomainAxis();
dateAxis.setDateFormatOverride(new SimpleDateFormat("dd.MMM.yyyy", mapDataParameter.getLocale()));
// test
Range range = new Range(1.1d, 19.9d);
dateAxis.setRange(range, true, true);
// Zeige die Anzahl über dem Balken
XYItemLabelGenerator labelGenerator = new XYItemLabelGenerator()
{
@Override
public String generateLabel(XYDataset xyd, int i, int i1)
{
Number tmp = xyd.getY(i, i1);
String label = "" + tmp.intValue();
return label;
}
};
// set this at the renderer of the count dataset
if (getPlot().getRendererCount() > 1)
{
getPlot().getRenderer(0).setSeriesPaint(0, CUMMULATED_COLOR);
getPlot().getRenderer(1).setPaint(COUNTCOLOR);
getPlot().getRenderer(1).setBaseItemLabelGenerator(labelGenerator);
getPlot().getRenderer(1).setBaseItemLabelsVisible(true);
}
// dauert länger, als ohne, macht aber nichts
restrChart.setAntiAlias(true);
setChart(restrChart);