如何更改Java中的图表比例

时间:2016-02-05 22:56:28

标签: java swing awt java-2d

enter image description here

我有一张图表,其中x轴显示时间,y轴显示我的数据。 我想通过为x轴选择不同的指标来更改比例。例如秒,分钟和小时刻度。默认值为秒。因此,如果我选择分钟,图表应该更小并且更加弯曲。任何的想法? UI没有完成,但是您认为会有x和y轴。参数度确定它应该缩放到秒(度= 1), 分钟(度= 60)或小时(度= 3600)

private void drawLines(Graphics g, ArrayList<Point> points,int degree) throws Exception {

    if (points == null || points.isEmpty()) {
        throw new Exception("No points found!!!");
    }

    for (int i = 0; i < points.size() - 1; i++) {

        Point firstPoint = points.get(i);
        Point secondPoint = points.get(i + 1);

        g.drawLine((int) firstPoint.getX(), (int) firstPoint.getY(), (int) secondPoint.getX(),
                (int) secondPoint.getY());
    }

}

1 个答案:

答案 0 :(得分:2)

考虑使用,它会缩放图形以填充封闭容器。在看到here的示例中,封闭容器是ChartPanel,已添加到框架的默认CENTER的{​​{1}}。这将允许图形在调整封闭框架大小时增大和缩小。

image

一般方案使用linear interpolation映射模型和视图坐标。给定以下比例,您可以交叉乘法并求解缺失的坐标,如将鼠标坐标映射到图像中的像素坐标的完整example所示。

BorderLayout
  

我不想使用view.x : panelWidthInPixels :: model.x : modelXRange view.y : panelHeightInPixels :: model.y : modelYRange 。还有其他办法吗?

是的,作为@MadProgrammer comments,你可以

  • 使用上面显示的比例将数据缩放到封闭容器中。引用的example隔离了基本方法; JFreeChart是一个功能齐全的示例。

  • 使用JFreeChart将渲染图像缩放到封闭容器中。这个example's BufferedImage会吸引ComponentHandler,其大小可以填充封闭的BufferedImageJPanel图像在background的实现中呈现。调整框架大小以查看效果。

  • 使用应用于图形上下文的变换将渲染图像缩放到封闭容器。典型示例显示为herehere