如何在Java中更改图表Scale

在此处输入图像描述

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

private void drawLines(Graphics g, ArrayList 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 ,它被添加到框架的默认BorderLayoutCENTER中。 这将允许图形在调整封闭框架大小时增大和缩小。

图片

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

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

我不想使用JFreeChart 。 还有别的办法吗?

是的,正如@MadProgrammer 评论 ,你可以

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

  • 使用BufferedImage将渲染图像缩放到封闭容器。 此示例的 ComponentHandler绘制为BufferedImage ,其大小适合填充封闭的JPanelbackground图像在paintComponent()的实现中呈现。 调整框架大小以查看效果。

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