我有一个漂亮的、漂亮的 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() 方法不会产生影响,我将如何确保标签有足够的空间来完全打印?我也愿意旋转刻度标签,虽然我还没有弄清楚如何做到这一点,只知道如何旋转轴标签。