【问题标题】:JFreeChart last X-axis label cut offJFreeChart 最后一个 X 轴标签被截断
【发布时间】:2013-04-12 01:19:18
【问题描述】:

我有一个漂亮的、漂亮的 JFreeChart 生成的折线图,但有一个例外 - 我的 X 轴上的最后一个值被截断,如下所示:

| | |_________|________|__________|_________|_________| 100 赫兹 1 赫兹 10 赫兹 100 赫兹 1 兆赫 10 兆赫

(注意以 MHz 为单位的 z 被截断)。

我在这里研究了解决方案:
JFreeChart tick label cut off

但因为我在 LogAxis 中手动指定范围,所以从 JavaDoc 中显示设置边距无效。
JavaDoc

这是我用来生成 X 轴的代码:

最终 LogAxis domainAxis = new LogAxis(frequencyAxisLabel); domainAxis.setStandardTickUnits(LogAxis.createLogTickUnits(Locale.ENGLISH)); domainAxis.setRange(100, 10000000); //100Hz 到 10MHz domainAxis.setUpperMargin(.05); //没有效果 domainAxis.setNumberFormatOverride(new UnitNumberFormat(UnitValue.HERTZ)); plot.setDomainAxis(domainAxis);

如果有帮助,我还将使用以下内容将其写入 .svg 文件:

// 获取一个 DOMImplementation 并创建一个 XML 文档 DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); 文档 document = domImpl.createDocument(null, "svg", null); // 创建 SVG 生成器的实例 SVGGraphics2D svgGenerator = new SVGGraphics2D(document); svgGenerator.setSVGCanvasSize(新维度(720, 470)); // 在 SVG 生成器中绘制图表 矩形边界 = new Rectangle(10, 10, 700, 450); chart.draw(svgGenerator, bounds); //写入svg文件 OutputStream outputStream = new FileOutputStream(new File("SomePath)); Writer out = new OutputStreamWriter(outputStream, "UTF-8"); svgGenerator.stream(out, true /* 使用 css */); outputStream.flush(); outputStream.close();

鉴于 setUpperMargin() 方法不会产生影响,我将如何确保标签有足够的空间来完全打印?我也愿意旋转刻度标签,虽然我还没有弄清楚如何做,只知道如何旋转轴标签。

【问题讨论】:

    标签: jfreechart truncation axis-labels


    【解决方案1】:

    好的,找到了一个可行的解决方案。

    我用过

    chart.setPadding(new RectangleInsets(10, 10, 10, 10));
    

    显然,您的里程可能会有所不同,但这似乎符合我的目的。

    【讨论】:

      【解决方案2】:

      可以在jfreechart board 上找到另一种解决方案

      简而言之,将以下内容添加到生成 X 轴的代码中:

      plot.getDomainAxis().setMaximumCategoryLabelWidthRatio(1.0f);
      

      或者,对于您上面的代码;

      domainAxis.setMaximumCategoryLabelWidthRatio(1.0f);
      

      这解决了我使用水平条形图的问题,其中长域标签被“...”后缀截断。

      【讨论】:

        【解决方案3】:

        试试这个:

        // 改变范围轴顶部的边距...

        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();

        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

            rangeAxis.setUpperMargin(0.15);
        
            rangeAxis.setLowerMargin(0.15);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-13
          相关资源
          最近更新 更多