2013-04-18 9 views
1

У меня есть хороший, довольно JFreeChart сгенерированных линия диаграммы, с одним исключением - последнее значение на моей оси X становится усечен, так как:JFreeChart метка последней оси Х отрезали

 

     | 
     | 
     |_________|________|__________|_________|_________| 
    100 Hz 1 kHz 10 kHz 100 kHz 1 MHz 10 MH 

(Обратите внимание, что z в МГц отключена).

Я посмотрел в решение здесь:
JFreeChart tick label cut off

, но потому, что я вручную задать диапазон в 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() не будет иметь эффекта, как бы я хотел убедиться, что у метки достаточно места для полной печати? Я открыт для поворота ярлыков меток, хотя я и не понял, как это сделать, только как повернуть метку оси.

ответ

1

Хорошо, найдено одно решение, которое работает.

Я использовал

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

очевидно пробег может варьироваться, но это, кажется, работает для моих целей.

1

Другим решением может быть найден здесь на jfreechart board

Короче, добавьте следующие строки в коде, где вы генерировать X-Axis:

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

или, для кода выше;

domainAxis.setMaximumCategoryLabelWidthRatio(1.0f); 

Это решило проблему для меня, используя горизонтальную гистограмму, где длинные метки доменов были усеченный с «...» суффикс.

0

Попробуйте это:

// изменить запас в верхней части оси диапазона ...

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

rangeAxis.setStandardTickUnits (NumberAxis.createIntegerTickUnits());

rangeAxis.setUpperMargin(0.15); 

    rangeAxis.setLowerMargin(0.15);