在java中,你能从两个数组制作一个折线图吗?

Posted

技术标签:

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

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

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

【问题讨论】:

寻找图形库。 到目前为止我还没有尝试过任何东西,我一直在尝试找到一些关于此的指南,但没有找到任何东西。我也不确定发布代码的最佳方式 【参考方案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);”为图中的每个点填充一个椭圆?

以上是关于在java中,你能从两个数组制作一个折线图吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何用Echarts制作标准折线图

excel折线图中怎么设置不等距的Y轴,可以设置吗?

Tableau 图表大全5.0之折线图制作

java生成饼状图,条形图,折线图的技术可以动态的显示

javascript怎么使用canvas制作类似于统计图,折线图,折线走势等

Excel技巧:诡异的折线图?折线图与XY散点图的区别