【问题标题】:How to change diagram Scale in Java如何在 Java 中更改图表比例
【发布时间】:2016-05-16 01:36:47
【问题描述】:

我有一个图表,其中 x 轴显示时间,y 轴显示我的数据。 我想通过为 x 轴选择不同的指标来更改比例。例如秒、分和小时刻度。默认是第二个。因此,如果我选择分钟,图表应该更小并且更弯曲。任何想法? UI 尚未完成,但是您认为会有 x 和 y 轴。参数degree决定了应该缩放到秒(degree=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());
    }

}

【问题讨论】:

  • 代码在哪里?它是什么样的图表? jfreechart?
  • 不,它不是 jfreechart。我添加了代码
  • 您有多种选择,可以缩放数据中的点,也可以缩放Graphics 上下文。第一个将要求您对数据进行规范化(在 1-0 之间),以便您有一个参考点来进行缩放
  • @MadProgrammer:作为参考,jfreechart 在视图中缩放。
  • @trashgod 并非所有人都可以使用第三方库;)

标签: java swing awt java-2d


【解决方案1】:

考虑使用,它会缩放图形以填充封闭的容器。在here 的示例中,封闭容器是添加到框架默认BorderLayoutCENTERChartPanel。这将允许图表随着封闭框架的大小调整而增长和缩小。

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

view.x : panelWidthInPixels :: model.x : modelXRange
view.y : panelHeightInPixels :: model.y : modelYRange

我不想使用JFreeChart。有没有其他办法?

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

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

  • 使用BufferedImage 将渲染图像缩放到封闭容器。这个example'sComponentHandler 绘制成一个BufferedImage,它的大小可以填充封闭的JPanelbackground 图像在 paintComponent() 的实现中呈现。调整框架大小以查看效果。

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

【讨论】:

  • 谢谢。但是我不想使用 JFreechat。有没有其他办法?
  • 我已经在上面详细说明了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
相关资源
最近更新 更多