我有一个漂亮的JFreeChart生成的折线图,有一个例外——我X轴上的最后一个值被截断了,就像这样:
| | |_________|________|__________|_________|_________| 100 Hz 1 kHz 10 kHz 100 kHz 1 MHz 10 MH
(注意,以兆赫为单位的z被切断)。
我在这里研究了解决方案:
JFreeChart勾号标签切断
但是因为我在LogAxis
中手动指定范围,所以从JavaDoc中可以看出设置边距没有效果
JavaDoc
这是我用来生成X轴的代码:
final LogAxis domainAxis = new LogAxis(frequencyAxisLabel); domainAxis.setStandardTickUnits(LogAxis.createLogTickUnits(Locale.ENGLISH)); domainAxis.setRange(100, 10000000); //100Hz to 10MHz domainAxis.setUpperMargin(.05); //Has no effect domainAxis.setNumberFormatOverride(new UnitNumberFormat(UnitValue.HERTZ)); plot.setDomainAxis(domainAxis);
如果有帮助的话,我还使用以下方法将此内容写入. svg文件:
// Get a DOMImplementation and create an XML document DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); Document document = domImpl.createDocument(null, "svg", null); // Create an instance of the SVG Generator SVGGraphics2D svgGenerator = new SVGGraphics2D(document); svgGenerator.setSVGCanvasSize(new Dimension(720, 470)); // draw the chart in the SVG generator Rectangle bounds = new Rectangle(10, 10, 700, 450); chart.draw(svgGenerator, bounds); // Write svg file OutputStream outputStream = new FileOutputStream(new File("SomePath)); Writer out = new OutputStreamWriter(outputStream, "UTF-8"); svgGenerator.stream(out, true /* use css */); outputStream.flush(); outputStream.close();
假设setUpperMargin()方法不会产生效果,我如何确保标签有足够的空间完全打印?我也愿意旋转刻度标签,虽然我也没有弄清楚如何做,只是如何旋转轴标签。
试试这个:
//更改范围轴顶部的边距。。。
NumberAxis=(NumberAxis)plot.getRangeAxis();
范围轴。设置标准滴答单位(NumberAxis.createIntegerTickUnits());
rangeAxis.setUpperMargin(0.15);
rangeAxis.setLowerMargin(0.15);
另一个解决方案可以在jfreechart板上找到
简而言之,在生成X轴的代码中添加以下内容:
plot.getDomainAxis().setMaximumCategoryLabelWidthRatio(1.0f);
或者,对于上面的代码;
domainAxis.setMaximumCategoryLabelWidthRatio(1.0f);
这解决了我使用水平条形图的问题,其中长域标签被截断为“…”后缀
好的,找到了一个有效的解决方案。
我曾经
chart.setPadding(new RectangleInsets(10, 10, 10, 10));
显然,您的里程数可能会有所不同,但这似乎符合我的目的。
在JFreechart中,我有一个带有日期(和时间)的X轴。 我怎样才能让JFreechart优化它们并充分利用它们? 现在它包含的标签比空间多,所有标签都转换为“…”。 如果不是所有的刻度都有标签,这是完全可以的,但是我想要尽可能多的(如果它们合适并且可以完全显示)。 我怎样才能做到这一点? 这里是完整的最小源来重现截断的标签。(默认情况下,JFreechart不处理优化: 我更喜欢像@tras
我有一个图表,以为域。它看起来很好,但是最后一个轴标签有时会离开图表区域。下面是要重现的示例代码: 以下是当前的截图;问题可以在最后一个标签上看到: 是什么原因导致最后一个标签呈现在当前图表区域之外?还有,我该如何预防呢? 但是,如果我将lot_of_values更改为true(这将向集合中添加更多数据-您可以在源代码中看到),那么域轴的最后一个标签将被剪切。下面是lot_of_values=tr
我有数据,例如(13600),(24400)。。。(3315000)其中(13000)- 如果放入图表中,轴将显示“秒”作为数字。我设置了一个代码,以1小时为间隔显示轴标签。 现在轴标签是:0。。。3600 ... 7200 ... 10.800 ... 如何使轴标签以小时显示?(0 ... 1 ... 2 ... 3 ...)
我的Python脚本里有这个 它产生了一个像这样的图表 正如你所看到的,x标签被切断了,这不是我没有完全扩展图形,我已经尝试过了,它仍然被切断。我怎样才能在图表上得到整个标签? 谢啦
问题内容: 我有一个始终从x = 0开始的JFree XY折线图。然后,根据属性文件中用户定义的设置,应用程序将根据该数字(以分钟为单位)递增。 例如,x = 0开始时,用户定义的设置为5,因此刻度变为0、5、10、15、20…,或者用户设置为3,因此变为0、3、6、9、12…非常简单。 我遇到的问题是图表开始的方式。如果我从0开始,则0在图形的中间,而不是在左下角的-0.0000005,-0.0
到目前为止,除了第一个和最后一个标签(Su和S)上的值之外,一切都很好。有没有办法添加填充,这样Su在X轴的左边有一些填充,可以完全渲染圆,S在右边有一些填充,这样S的圆值就可以完全渲染。我试着手动设置填充,通过许多例子,但是到目前为止还没有正确的工作。有人有什么想法,可以指出正确的方向,那就太好了。谢谢!