【问题标题】:In java, can you make a line graph from two arrays?在java中,你能从两个数组制作一个折线图吗?
【发布时间】:2016-10-17 22:14:27
【问题描述】:

我想制作一个 x 值为 1-100 和 y 值范围为 1-18 的折线图。我将它们存储在两个当前打印到文本文件的数组中(出于显而易见的原因,我不想手动制作包含 100 个点的条形图)。也许使用应用程序窗口的东西?

我不知道我可以给你什么更多的信息来让你更清楚我在问什么,所以如果有什么就问它并发布它。

【问题讨论】:

  • 寻找图形库。
  • 到目前为止我还没有尝试过任何东西,我一直在尝试找到一些关于此的指南,但没有找到任何东西。我也不确定发布代码的最佳方式

标签: java arrays graph


【解决方案1】:

可能是这样的吗?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;

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

public final class LineGraph {
    private LineGraph() {

    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(LineGraph::doRun);
    }

    private static void doRun() {
        final int[] x = new int[] {0, 40, 80, 120, 160, 200, 240, 280, 320, 360};
        final int[] y = new int[] {100, 200, 100, 50, 200, 0, 300, 200, 100, 300};

        final
        JFrame jFrame = new JFrame();
        jFrame.getContentPane().setLayout(new BorderLayout());
        jFrame.getContentPane().add(new JPanelImpl(x, y), BorderLayout.CENTER);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setSize(800, 600);
        jFrame.setVisible(true);
    }

    private static final class JPanelImpl extends JPanel {
        private final int[] x;
        private final int[] y;

        public JPanelImpl(final int[] x, final int[] y) {
            this.x = x;
            this.y = y;
        }

        @Override
        public void paintComponent(final Graphics graphics) {
            graphics.setColor(Color.WHITE);
            graphics.fillRect(0, 0, getWidth(), getHeight());

            for(int i = 0; i < this.x.length; i++) {
                if(i + 1 < this.x.length) {
                    final int x0 = this.x[i];
                    final int y0 = this.y[i];
                    final int x1 = this.x[i + 1];
                    final int y1 = this.y[i + 1];

                    graphics.setColor(Color.BLACK);
                    graphics.drawLine(x0, y0, x1, y1);
                    graphics.fillOval(x1 - 3, y1 - 3, 6, 6);
                }
            }
        }
    }
}

【讨论】:

  • 感谢它的工作,但我有一些问题。该图非常小,位于左上角,并且上下颠倒。我会尝试自己修复它,但你知道为什么请告诉我。
  • 窗口使用坐标,最小的X在窗口的左边,最大的X在右边,最小的Y在顶部,最大的Y在底部。我相信 X 轴就像你想要的那样。但是对于 Y 轴,执行类似 (height - y) 的操作(如果我没记错的话)。
  • 我明白了,我只是在将变量设置到数组时将它们相乘。谢谢,这真的很有帮助
  • 太棒了!不确定您是否注意到我添加了“graphics.fillOval(x1 - 3, y1 - 3, 6, 6);”为图中的每个点填充一个椭圆?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多