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