【问题标题】:Jfree charts Labels overlappingJfree 图表标签重叠
【发布时间】:2021-05-23 23:44:21
【问题描述】:

我正在使用面积图从数据库中绘制温度,但随着数据的增长,图表标签开始合并。请帮我把它修好。

【问题讨论】:

  • 嗨@Rafay,欢迎!,您应该编辑您的问题,显示一小段可重现的代码,以帮助您

标签: jfreechart


【解决方案1】:

JFreeChart 不对面积图进行任何重叠检测。您必须实现自己的定制器,并且可以设计一个算法来跳过一些标签,只需让它们透明即可。

你必须创建类并实现

net.sf.jasperreports.engine.JRChartCustomizer

并在名为customize 的重写方法中编写逻辑。例如,如果您想在第 8 次迭代后打印标签,请按照以下代码中的操作进行操作以供参考。

@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));
                       }
           }
       } 

【讨论】:

  • 您的解决方案很棒。我还需要一件事。它解决了我重叠的主要问题,但仍然从最后开始重叠。如何解决这个问题。
  • @Rafay 我刚刚提出了避免重叠的解决方案,现在问题可能出在您的算法上,您可以通过定义最大范围来限制它,以便在该范围之后跳过所有迭代并打印最后一个标签。
  • 如果有帮助请采纳解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
相关资源
最近更新 更多