我们正在使用 JFreeChart 构建一个引擎来显示图表。这是一个在 Tomcat + Java 1.5.0 上运行的 Web 服务,并将图表呈现为 PNG 和 JPEG(使用 ChartUtilities.writeChartAs{PNG,JPEG}() )。
我们遇到了一个问题,JFreeChart 似乎可以缩放绘图区域内的所有内容,但仅缩放几个像素。结果是图表看起来不一致,例如:
- 次要刻度有时会水平拉伸,因此它们似乎是两个像素宽而不是一个。
- 我们使用绘图区域右上角的小图像作为水印。这在其中间附近(但不完全是)某处水平和垂直拉伸了一个像素。
- 背景网格线似乎出现在亚像素边界上。我还没有找到一种方法来创建一个准确的虚线网格线。
我们已经尝试了 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 个刻度。