如何在JFreeChart中禁用缩放?

时间:2010-05-25 13:06:45

标签: java graph jfreechart

我们正在使用JFreeChart构建一个引擎来显示图形。这是一个在Tomcat + Java 1.5.0上运行的Web服务,并将图表呈现为PNG和JPEG(使用ChartUtilities.writeChartAs {PNG,JPEG}())。

我们遇到了一个问题,JFreeChart似乎可以扩展Plot区域内的所有内容,但只有几个像素。结果是图表看起来不一致,例如:

  • 小刻度有时会水平拉伸,因此它们似乎是两个像素宽而不是一个。
  • 我们在绘图区域的右上角使用一个小图像作为水印。这是在水平和垂直方向上拉伸一个像素,在其中间附近(但不完全是)。
  • 背景网格线似乎出现在子像素边界上。我还没有找到一种方法来创建一个准确的虚线网格线。

我们已经尝试了1.0.9和1.0.13,结果完全相同(除了小版本,旧版本中没有)。此外,将图像渲染为帧而不是JPEG / PNG会产生相同的结果。

提前非常感谢帮助:)

编辑:SSCCE:

@Test
public void testScaling1() throws InterruptedException {

    // Load Image:
    Component dummy = new Component() {};
    MediaTracker tracker = new MediaTracker(dummy);
    Image img = Toolkit.getDefaultToolkit().getImage("C:\\My\Image.gif");
    tracker.addImage(img, 0);
    tracker.waitForAll();

    // Build Data set and base chart.
    TimeSeriesCollection dataset = new TimeSeriesCollection();

    TimeSeries ts = new TimeSeries("Sample");
    ts.add(new Second(0, 0, 0, 1, 1, 1900), 1.0);
    ts.add(new Second(1, 0, 0, 1, 1, 1900), 3.0);
    ts.add(new Second(2, 0, 0, 1, 1, 1900), 4.0);
    ts.add(new Second(3, 0, 0, 1, 1, 1900), 2.0);

    dataset.addSeries(ts);

    JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "blabla",
            null,
            null,
            dataset,
            true,
            true,
            false
    );

    // Add BG image in top-right corner.
    XYPlot xy = chart.getXYPlot();
    xy.setBackgroundAlpha(0.0F);
    xy.setBackgroundImage(img);
    xy.setBackgroundImageAlignment(Align.NORTH_WEST);
    xy.setBackgroundImageAlpha(1.0F);

    paintChart(chart);

}

使用带有小字体文字或网格的图像。这将显示背景图像的缩放效果。

编辑2: 我们已经使用子类化或代理渲染器并在其drawItem()(或类似)方法中的文本中绘制标签。这很好用。 然而,轻微的蜱现在是一个问题 - 它们似乎也在缩放。例如:见第9和第15个刻度。

look at the bottom http://img14.imageshack.us/img14/3625/76676732.jpg

1 个答案:

答案 0 :(得分:1)

我无法使用版本1.0.13,Java 1.5,Mac OS X的saveChartAsJPEG()writeChartAsPNG()重现您描述的效果,代码如下:

try {
    ChartUtilities.writeChartAsPNG(new FileOutputStream(
        new File("test.png")), chart, 600, 400);
} catch (IOException ex) {
    ex.printStackTrace();
}

屏幕是否显示相同的工件?更改WIDTHHEIGHT参数或省略水印后会发生什么?您是否使用具有不寻常指标的特殊字体?你尝试过不同的平台吗?

您可以按如下方式运行TimeSeriesChartDemo1

  

java -cp jfreechart-1.0.13.jar:jcommon-1.0.16.jar org.jfree.chart.demo.TimeSeriesChartDemo1

Mac OS 10.5.8,Java 1.5.0_24,JFreeChart 1.0.13,TimeSeriesDemo1,使用saveChartAsPNG()ImageIO.read()setBackgroundImage()setBackgroundImageAlignment(Align.NORTH_WEST)虽然有点时髦。

alt text http://i45.tinypic.com/68wxgp.png