gpt4 book ai didi

Java Swing 线图

转载 作者:行者123 更新时间:2023-12-01 20:03:29 30 4
gpt4 key购买 nike

我正在尝试根据数组中保存的数据绘制折线图。我已经成功绘制了 X 轴和 Y 轴。然而,当我在图表上绘制带有数据的线时,它与 X 轴和 Y 轴值不对齐。我不确定如何解决这个问题。我已经展示了下面的代码:

public void drawLineG(Graphics g, int yCoords[]) {
String maxY = Integer.toString(getMax(yCoords));
String minY = Integer.toString(getMin(yCoords));
String maxX = Double.toString((xInterval * yCoords.length) - xInterval);
String minX = Double.toString(xStart);

g.setColor(Color.BLUE);
int height = (getHeight() / 2);
int x = 200; // start x point

// previous coord positions.
int prevX = x;
int prevY = yCoords[0];

g.setColor(Color.BLACK);
g.drawLine(prevX, getHeight() / 2, 500, getHeight() / 2);
g.drawLine(prevX, 200, 200, getHeight() / 2);

g.setColor(Color.BLUE);
g.drawString(minY, 190, (getHeight() / 2));
g.drawString(maxY, 180, (getHeight() / 2) - 255);
g.drawString(yLabel, 140, (getHeight() / 2) - 100);
g.drawString(minX, 192, (getHeight() / 2) + 20);
g.drawString(maxX, 500, (getHeight() / 2) + 20);
g.drawString(xLabel, 350, (getHeight() / 2) + 50);
for (int y : yCoords) {
g.setColor(Color.RED);
g.drawLine(prevX, height - prevY, x, height - y);
prevX = x;
prevY = y;

// add an increment to the X pos.
x = x + 50;
}
}

我一直在测试的数据数组包含值:0, 3, 4, 7, 5, 10, 3

但是,当将其绘制在图表上时,它与 x 轴和 y 轴上的值并不对齐。

当前:/image/Ju8BQ.jpg我想要实现的目标:/image/n9Aio.jpg

有什么帮助吗?
谢谢

最佳答案

你的问题是你的比例,你试图绘制给定的yCoords(3, 10等等),但它们应该像: 30, 100 以适应窗口的比例(Window = 您的程序窗口)。

例如,在下面的代码中,每个“正方形”或每个“单位”的大小均为 30 x 30 像素,因此我必须将 yCoord = 3 转换为它等效值是 3 * 30 = 90 但由于轴位于下方,从 400 开始,我必须减去它,以便从轴或从底部获得坐标真实 yCoord 的窗口,即 400 - 90 = 310,现在这是我必须绘制的真正点。

但是,绘画应该在 paintComponent 方法中完成。

在我的示例中,我没有绘制 0, 10, 0.0, 90.0 的字符串,但如果您愿意,您可以稍后再绘制

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class GraphSample {
private JFrame frame;

public static void main(String[] args) {
SwingUtilities.invokeLater(new GraphSample()::createAndShowGui);
}

private void createAndShowGui() {
frame = new JFrame(getClass().getSimpleName());

GraphDrawer drawer = new GraphDrawer(new int[] {0, 3, 4, 7, 5, 10, 3});

frame.add(drawer);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

@SuppressWarnings("serial")
class GraphDrawer extends JPanel {
private int[] yCoords;
private int startX = 100;
private int startY = 100;
private int endX = 400;
private int endY = 400;
private int unitX = (endX - startX) / 10;
private int unitY = (endY - startY) / 10;
private int prevX = startX;
private int prevY = endY;

public GraphDrawer(int[] yCoords) {
this.yCoords = yCoords;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;

//We draw in the following 2 loops the grid so it's visible what I explained before about each "unit"
g2d.setColor(Color.BLUE);
for (int i = startX; i <= endX; i += unitX) {
g2d.drawLine(i, startY, i, endY);
}

for (int i = startY; i <= endY; i += unitY) {
g2d.drawLine(startX, i, endX, i);
}

//We draw the axis here instead of before because otherwise they would become blue colored.
g2d.setColor(Color.BLACK);
g2d.drawLine(startX, startY, startX, endY);
g2d.drawLine(startX, endY, endX, endY);

//We draw each of our coords in red color
g2d.setColor(Color.RED);
for (int y : yCoords) {
g2d.drawLine(prevX, prevY, prevX += unitX, prevY = endY - (y * unitY));
}
}

@Override
public Dimension getPreferredSize() {
return new Dimension(endX + 100, endY + 100);
}
}
}

我希望清楚错误是什么。

这是 10 x 10 网格的输出示例 enter image description here

关于Java Swing 线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718958/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com