我有一个图表,其中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()); } }
考虑使用jfreechart,它将缩放图形以填充封闭的容器。中看到的示例 这里,封闭容器是一个ChartPanel被添加到该CENTER帧的默认的 BorderLayout。这将使图形随着封闭框架的大小而增大和缩小。
该通用方案使用线性插值法映射模型和视图坐标。给定以下比例,您可以相乘并求解丢失的坐标,如此完整 示例所示,该示例将鼠标坐标映射到图像中的像素坐标。
view.x : panelWidthInPixels :: model.x : modelXRange view.y : panelHeightInPixels :: model.y : modelYRange
我不想使用JFreeChart。还有其他办法吗?
是的,正如@MadProgrammer评论一样,您可以
使用上面显示的比例将数据缩放到封闭容器中。引用的示例隔离了基本方法。JFreeChart是一个功能齐全的示例。
使用缩放比例将渲染的图像缩放到封闭的容器BufferedImage。本示例将 ComponentHandler绘制成一个BufferedImage大小足以填充附件的JPanel。该background图像在的实现中呈现paintComponent()。调整框架大小以查看效果。
使用应用于图形上下文的变换将渲染的图像缩放到封闭的容器。