Jfree 图表标签重叠
Jfree charts Labels overlapping
我正在使用面积图从数据库中绘制温度,但随着数据的增长,图表标签开始合并。请帮助我修复它。
JFreeChart 不对面积图进行任何重叠检测。您必须实现自己的定制器,并且可以设计一个算法来跳过一些标签,只需将它们设为透明即可。
您必须创建 class 并实施
net.sf.jasperreports.engine.JRChartCustomizer
并在名为 customize
的覆盖方法中编写逻辑。例如,如果您想在第 8 次迭代后打印标签,请按照以下代码中的 done 进行操作以供参考。
@Override
public void customize(org.jfree.chart.JFreeChart chart, net.sf.jasperreports.engine.JRChart jasperChart) {
org.jfree.chart.renderer.category.AreaRenderer renderer;
org.jfree.chart.plot.CategoryPlot plot;
org.jfree.chart.axis.NumberAxis rangeAxis;
org.jfree.chart.axis.CategoryAxis axis;
renderer = (org.jfree.chart.renderer.category.AreaRenderer) chart.getCategoryPlot().getRenderer();
plot = chart.getCategoryPlot();
rangeAxis = (org.jfree.chart.axis.NumberAxis) plot.getRangeAxis();
axis = plot.getDomainAxis();
CategoryAxis domainAxis = plot.getDomainAxis();
CategoryLabelPositions pos = domainAxis.getCategoryLabelPositions();
for (int i = 1; i <= plot.getCategories().size(); i++) {
if(i%8==0){
continue;
} else{
String cat_Name = (String) plot.getCategories().get(i-1);
domainAxis.setTickLabelPaint(cat_Names, new Color(0,0,0,0));
}
}
}
我正在使用面积图从数据库中绘制温度,但随着数据的增长,图表标签开始合并。请帮助我修复它。
JFreeChart 不对面积图进行任何重叠检测。您必须实现自己的定制器,并且可以设计一个算法来跳过一些标签,只需将它们设为透明即可。
您必须创建 class 并实施
net.sf.jasperreports.engine.JRChartCustomizer
并在名为 customize
的覆盖方法中编写逻辑。例如,如果您想在第 8 次迭代后打印标签,请按照以下代码中的 done 进行操作以供参考。
@Override
public void customize(org.jfree.chart.JFreeChart chart, net.sf.jasperreports.engine.JRChart jasperChart) {
org.jfree.chart.renderer.category.AreaRenderer renderer;
org.jfree.chart.plot.CategoryPlot plot;
org.jfree.chart.axis.NumberAxis rangeAxis;
org.jfree.chart.axis.CategoryAxis axis;
renderer = (org.jfree.chart.renderer.category.AreaRenderer) chart.getCategoryPlot().getRenderer();
plot = chart.getCategoryPlot();
rangeAxis = (org.jfree.chart.axis.NumberAxis) plot.getRangeAxis();
axis = plot.getDomainAxis();
CategoryAxis domainAxis = plot.getDomainAxis();
CategoryLabelPositions pos = domainAxis.getCategoryLabelPositions();
for (int i = 1; i <= plot.getCategories().size(); i++) {
if(i%8==0){
continue;
} else{
String cat_Name = (String) plot.getCategories().get(i-1);
domainAxis.setTickLabelPaint(cat_Names, new Color(0,0,0,0));
}
}
}