Это Java-программа, в которой вы можете визуализировать данные в виде диаграмм, я объяснил все с помощью кода. Вот почему это будет длинная статья. Итак, давайте начнем.

Мы будем работать с CSV-файлом covid-19, потому что это упрощает объяснение.

Я загрузил весь код в профиль github. Что вы можете проверить по ссылке в био. Я собираюсь загрузить код здесь, а затем скриншот работы кода. Я постараюсь объяснить, как это работает.

Гитхаб: https://github.com/isauravmanitripathi/covid-19-data-visualization

GUI.java

Первое, что нам нужно сделать, это создать графический интерфейс, который пользователь увидит первым, когда запустит нашу программу. Ниже приведен код для графического интерфейса. После выполнения этот код покажет вывод, подобный этому:

Код GUI.java:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.data.general.PieDataset;
import org.jfree.chart.plot.RingPlot;
import org.jfree.data.category.CategoryDataset;
import javax.swing.ImageIcon;
public final class gui extends JFrame {
    public gui() {
assignment_event_handler = new GUIEventHandler();
        FILE_CHOOSER = new JFileChooser();
  
        this.setJMenuBar(createMenuBar());
        createControlPanel(); 
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
setMinimumSize(new Dimension(MIN_FRAME_WIDTH, MIN_FRAME_HEIGHT));
assignment_chartmaker = new choosecolour();
        assignment_chartmaker.setVisible(false);
    }
public void ActivateColour() {
        assignment_exportVisualization_Button.setEnabled(true);
        assignment_editMenuIteassignment_ChangeColourScheme.setEnabled (true);
        assignment_ChangeColourScheme_Button.setEnabled (true);
    }
public void DisactivateColour() {
        
        assignment_editMenuIteassignment_ChangeColourScheme.setEnabled (false);
        assignment_ChangeColourScheme_Button.setEnabled (false);
    }
public void RedrawChartColour() {
     
        JFreeChart chart;
  final int NOCHART = -1;
  final int BARCHART = 0;
  final int LINECHART = 1;
  final int RINGCHART = 2;
  final int AREACHART = 3;
     if (assignment_chart.GetChart() == null) {
            System.out.println("Error: No chart object found.");
     } else {
            chart = assignment_chart.GetChart();
            
            if (assignment_chart.GetChartType() == NOCHART) {
                System.out.println("Error: No chart object found.");
                    
            } else {
                if (assignment_chart.GetChartType() == BARCHART) {
                    barcoloured renderer = new barcoloured(
                            gui.assignment_chartmaker.GetActiveMap());
                    CategoryPlot plot = (CategoryPlot) chart.getPlot();
                    CategoryDataset barDataset = plot.getDataset();
                    int i = 1;
                    while (i <= barDataset.getRowCount()) {
                        renderer.SetColor(plot, i);
                        i++;
                    }
                } else {
                        if (assignment_chart.GetChartType() == LINECHART) {
                            linecoloured renderer = new linecoloured(
                                    assignment_chartmaker.GetActiveMap());
                            CategoryPlot plot = (CategoryPlot) chart.getPlot();
                            renderer.SetColor(plot, 1);
                        } else {
                            if (assignment_chart.GetChartType() == RINGCHART) {
                                RingPlot plot = (RingPlot) chart.getPlot();
                                PieDataset dataset = plot.getDataset();
                                ringcoloured renderer = new ringcoloured(
                                        assignment_chartmaker.GetActiveMap());
                                renderer.SetColor(plot, dataset);
                            } else {
                                if (assignment_chart.GetChartType() == AREACHART) {
                                    areacoloured renderer = new areacoloured(
                                            assignment_chartmaker.GetActiveMap());
                                    CategoryPlot plot = (CategoryPlot) chart.getPlot();
                                    plot.setForegroundAlpha(0.5f);
                                    renderer.SetColor(plot, 1);
                                }
                            }
                        }
                    }
                }
            }
     }
public void SelectChartTab() {
        
     assignment_tabbedPanel.setSelectedIndex(CHART_PANEL);
    }
private void generateandexport() {
     
        assignment_drawchartbutton.setEnabled (true);
        assignment_exportVisualization_Button.setEnabled (true);
        assignment_editMenuIteassignment_DrawChart.setEnabled (true);
        assignment_file_menu_Iteassignment_Export.setEnabled (true);
        assignment_Forecast_Button.setEnabled(true);
        assignment_editMenuIteassignment_Forecast.setEnabled(true);
    }
private JPanel createButtonPanel(){
ImageIcon openImg = new ImageIcon();
        assignment_newFile1_Button = new JButton(openImg);
        assignment_newFile1_Button.setOpaque(false);
        assignment_newFile1_Button.setContentAreaFilled(false);
        assignment_newFile1_Button.setBorderPainted(false);
assignment_newFile1_Button.addActionListener(assignment_event_handler);
ImageIcon exportImg = new ImageIcon();
        assignment_exportVisualization_Button = new JButton(exportImg);
        assignment_exportVisualization_Button.setOpaque(false);
        assignment_exportVisualization_Button.setContentAreaFilled(false);
        assignment_exportVisualization_Button.setBorderPainted(false);
assignment_exportVisualization_Button.addActionListener(assignment_event_handler);
ImageIcon chartImg = new ImageIcon();
        assignment_drawchartbutton = new JButton(chartImg);
        assignment_drawchartbutton.setOpaque(false);
        assignment_drawchartbutton.setContentAreaFilled(false);
        assignment_drawchartbutton.setBorderPainted(false);
assignment_drawchartbutton.addActionListener(assignment_event_handler);
ImageIcon colourPickerImg = new ImageIcon();
        assignment_ChangeColourScheme_Button = new JButton(colourPickerImg);
        assignment_ChangeColourScheme_Button.setOpaque(false);
        assignment_ChangeColourScheme_Button.setContentAreaFilled(false);
        assignment_ChangeColourScheme_Button.setBorderPainted(false);
assignment_ChangeColourScheme_Button.addActionListener(assignment_event_handler);
ImageIcon forecastImg = new ImageIcon();
        assignment_Forecast_Button = new JButton(forecastImg);
        assignment_Forecast_Button.setOpaque(false);
        assignment_Forecast_Button.setContentAreaFilled(false);
        assignment_Forecast_Button.setBorderPainted(false);
assignment_Forecast_Button.addActionListener(assignment_event_handler);
JPanel panel = new JPanel();
return panel;
    }
private void createControlPanel() {
     
     JPanel assignment_buttonPanel = createButtonPanel();
     JTabbedPane tabPanel = newTabPanel();
JPanel controlPanel = new JPanel();
     controlPanel.setLayout(new GridLayout(1,1));
     controlPanel.add(assignment_buttonPanel);
add(controlPanel, BorderLayout.NORTH);
     add(tabPanel);
    }
private JMenu editingmenu() {
assignment_editMenu = new JMenu("Edit");
        menubar123.add(assignment_editMenu);
assignment_editMenuIteassignment_DrawChart = new JMenuItem("Draw Chart");
assignment_editMenuIteassignment_DrawChart.addActionListener(assignment_event_handler);
assignment_editMenuIteassignment_ChangeColourScheme = new JMenuItem(
          );
assignment_editMenuIteassignment_ChangeColourScheme.addActionListener(assignment_event_handler);
assignment_editMenuIteassignment_Forecast = new JMenuItem("Forecast");
assignment_editMenuIteassignment_Forecast.addActionListener(assignment_event_handler);
assignment_editMenuIteassignment_DrawChart.setEnabled (false);
        assignment_editMenuIteassignment_ChangeColourScheme.setEnabled (false);
        assignment_editMenuIteassignment_Forecast.setEnabled(false);
assignment_editMenu.add(assignment_editMenuIteassignment_DrawChart);
        assignment_editMenu.add(assignment_editMenuIteassignment_ChangeColourScheme);
        assignment_editMenu.add(assignment_editMenuIteassignment_Forecast);
     
        return assignment_editMenu;
    }
private JMenu newfilemenu() {
assignment_file_menu_ = new JMenu("CSV FILE");
        menubar123.add(assignment_file_menu_);
assignment_file_menu_Iteassignment_Open = new JMenuItem("Open");
assignment_file_menu_Iteassignment_Open.addActionListener(assignment_event_handler);
        
        assignment_file_menu_Iteassignment_Export = new JMenuItem("Save Chart");
assignment_file_menu_Iteassignment_Export.addActionListener(assignment_event_handler);
        
        assignment_file_menu_Iteassignment_Exit = new JMenuItem("Exit");
assignment_file_menu_Iteassignment_Exit.addActionListener(assignment_event_handler);
assignment_file_menu_Iteassignment_Export.setEnabled (false);
assignment_file_menu_.add(assignment_file_menu_Iteassignment_Open);
        assignment_file_menu_.add(assignment_file_menu_Iteassignment_Export);
        assignment_file_menu_.addSeparator();
        assignment_file_menu_.add(assignment_file_menu_Iteassignment_Exit);
     
        return assignment_file_menu_;
    }
private JMenuBar createMenuBar() {//creates the menu bar at the top
     
     menubar123 = new JMenuBar();
     newfilemenu();
     editingmenu();
     return menubar123;
    }
private JTabbedPane newTabPanel(){//creates the tabs
assignment_tabbedPanel = new JTabbedPane();
assignemnt_gui_panel1 = new JPanel();
        assignemnt_gui_panel1.setLayout(new GridLayout(1, 1));
        assignment_tabbedPanel.addTab( "CSV File", assignemnt_gui_panel1);
assignment_gui_panel2 = new JPanel();
        assignment_gui_panel2.setLayout(new GridLayout(1, 1));
        assignment_tabbedPanel.addTab( "Chart", assignment_gui_panel2 );
        add(assignment_tabbedPanel, BorderLayout.CENTER);
return assignment_tabbedPanel;
    }
private Boolean newFile1(){
assignment_dataSetBackup = assignment_dataSet;
     //opens file and then outputs it into a table as well as gets the data ready in  formal to put into charts
if (openingfilefirst) {
                openingfilefirst = false;
                FileFilter extensionFilter = new FileNameExtensionFilter(
                                    "CSV Files (.csv)", "csv");
                FILE_CHOOSER.addChoosableFileFilter(extensionFilter);
                        }
int returnVal = FILE_CHOOSER.showOpenDialog(gui.this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File assignment_file = FILE_CHOOSER.getSelectedFile();
assignment_dataSet = new chartdata();
            if (assignment_dataSet.BuildDataSet(assignment_file)) {
DisactivateColour();
                assignemnt_gui_panel1.removeAll();
                assignemnt_gui_panel1.add(new multiplefilechooser(assignment_dataSet));
                assignemnt_gui_panel1.repaint();
                assignemnt_gui_panel1.revalidate();
                assignment_tabbedPanel.setSelectedIndex(TABLE_PANEL);
if (loadingfile) {
assignment_chart = new chartgenerator(assignment_dataSet);
                    loadingfile = false;
                } else {
assignment_chart.DisposeWindow();
                    assignment_chart = new chartgenerator(assignment_dataSet);
                }
assignment_gui_panel2.removeAll();
                assignment_gui_panel2.add(assignment_chart);
assignment_chartmaker.setVisible(false);
            } else {
assignment_dataSet = assignment_dataSetBackup;
                return false;
}
        } else {
            return false;
        }
     return true;
    }
private class GUIEventHandler implements ActionListener {
@Override
        public void actionPerformed(ActionEvent event) {
if (event.getSource() == assignment_file_menu_Iteassignment_Open
                    || event.getSource() == assignment_newFile1_Button) {
        try {
        if (newFile1()) {
generateandexport();
        assignment_exportVisualization_Button.setEnabled(false);
        } else {
}
        } catch (NullPointerException e) {
}
} else {
if (event.getSource() != assignment_file_menu_Iteassignment_Exit) {
                    if(event.getSource()== assignment_Forecast_Button || event.getSource() == assignment_editMenuIteassignment_Forecast){
                        System.out.println("bruh");
                        Linear_Regression lr = new Linear_Regression();//starts linear regression. Opens in a new frame
                        lr.Setup(assignment_dataSet);
}
                    else if (event.getSource() == assignment_exportVisualization_Button ||
                            event.getSource() == assignment_file_menu_Iteassignment_Export) {
int chartwidth = assignment_gui_panel2.getSize().width;
                        int chartheight = assignemnt_gui_panel1.getSize().height;
graphsaver saver = new graphsaver(assignment_chart, chartwidth, chartheight);
saver.setJPanel(assignment_gui_panel2);
} else {
                        if (event.getSource() != assignment_drawchartbutton
                                && event.getSource() != assignment_editMenuIteassignment_DrawChart) {
                                    if (event.getSource() == assignment_editMenuIteassignment_ChangeColourScheme
                                            || event.getSource() == assignment_ChangeColourScheme_Button) {
                                            assignment_chartmaker.setVisible(true);
}
                                } else {
                            try {
                                assignment_chart.SetWindowVisible();
                            } catch (NullPointerException e) {
                                e.printStackTrace();
                            }
}
                    }
                } else {
dispose();
}
            }
        }
    } /* end class GUIEventHandler */
    
    public static choosecolour assignment_chartmaker;
private final int FRAME_WIDTH = 600;
    private final int FRAME_HEIGHT = 600;
    private final int MIN_FRAME_WIDTH = 500;
    private final int MIN_FRAME_HEIGHT = 500;
private final int TABLE_PANEL = 0;
    private final int CHART_PANEL = 1;
private final JFileChooser FILE_CHOOSER;
private Boolean openingfilefirst = true;
    private Boolean loadingfile = true;
    
    private GUIEventHandler assignment_event_handler;
private JMenuBar menubar123;
    private JMenu assignment_file_menu_;
    private JMenu assignment_editMenu;
private JMenuItem assignment_file_menu_Iteassignment_Open;
    private JMenuItem assignment_file_menu_Iteassignment_Export;
    private JMenuItem assignment_file_menu_Iteassignment_Exit;
private JMenuItem assignment_editMenuIteassignment_DrawChart;
    private JMenuItem assignment_editMenuIteassignment_ChangeColourScheme;
    private JMenuItem assignment_editMenuIteassignment_Forecast;
private JButton assignment_newFile1_Button;
    private JButton assignment_exportVisualization_Button;
    private JButton assignment_drawchartbutton;
    private JButton assignment_ChangeColourScheme_Button;
    private JButton assignment_Forecast_Button;
    private JTabbedPane assignment_tabbedPanel;
private JPanel assignemnt_gui_panel1;
    private JPanel assignment_gui_panel2;
private chartdata assignment_dataSet;
private chartdata assignment_dataSetBackup;
    private chartgenerator assignment_chart;
public static void main(String[] args) {  
        gui dataVisualizer = new gui();
        dataVisualizer.setLocationRelativeTo(null);
        dataVisualizer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        dataVisualizer.setTitle("Data Visualizer");
        dataVisualizer.setVisible(true);
    } 
} 

Выбор файла

Следующий код позволяет вам выбрать файл, который вы хотите визуализировать.

multifilechooser.java

import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import java.io.File; /* Used in testing */



public class multiplefilechooser extends JPanel {
   

    public multiplefilechooser(chartdata ds) {
           
        super(new GridLayout(1, 0));

        final JTable table = new JTable(ds.GetData(), ds.GetAttributes()) {
            private static final long serialVersionUID = 1L;
            
            public boolean getScrollableTracksViewportWidth(){ 
                return getPreferredSize().width < getParent().getWidth();
            }
            public boolean isCellEditable(int rowIndex, int colIndex) {
                return false; //Disable cell editing
            }
        };

        table.setFillsViewportHeight(true);

        
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);


        DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
        centerRenderer.setHorizontalAlignment( JLabel.CENTER );
        
        for(int i=0 ; i < ds.GetNoOfAttributes(); i++){
            table.getColumnModel().getColumn(i).setCellRenderer(centerRenderer);
        }    
        

        JScrollPane scrollPane = new JScrollPane(table);
        
        this.add(scrollPane);     
        this.setOpaque(true);
    }
   

    public static void main(String args[]) {
      File inputfile = new File("test.csv");
      chartdata data = new chartdata();
      data.BuildDataSet(inputfile);
      System.out.println("TableView:: TableView(testdata)");
      multiplefilechooser table = new multiplefilechooser(data);
      table.show();
      System.out.println("TableView:: TableView(testdata) - Test Passed");
   }
   
   
} /* end TableView class */

При выполнении это выведет следующее:

Здесь вы можете выбрать/найти CSV-файл, который хотите визуализировать. В частности, я буду использовать CSV-файл, предоставленный британским правительством по коронавирусу. Который вы загружаете, нажав на это:

Когда вы откроете свой файл, вы увидите следующее:

Когда вы нажимаете файл CSV, вам доступны несколько вариантов:

Вы можете либо открыть CSV-файл, либо сохранить свою диаграмму (это произойдет только тогда, когда диаграмма будет доступна. Я расскажу об этом дальше), и вы можете выйти из программы, фактически завершив java-программу.

После этого нам понадобится визуализатор, который поможет нам визуализировать диаграмму из предоставленных данных.

Визуализация данных

После выполнения этот файл запросит столбцы, которые он будет использовать для построения диаграммы. Поскольку это создает 2D-график, мы работаем только с двумя осями. Одна ось будет принимать ввод только в виде строки, а другая — только в виде целого числа. Причина этого в том, что когда я пытался построить диаграмму, используя данные в качестве столбца, она показывала ошибку, ошибка была вызвана тем, что столбец даты содержал косую черту (/) между ними. (пример: 29.01.2020). Поэтому я решил изменить эту ось как строку, а не как целое число. А затем внесли дополнительные изменения, чтобы добавить целые числа. Теперь он работает нормально.

Вот демонстрационный скриншот того, как это должно выглядеть:

Вы также можете изменить имя файла здесь, а затем просто сгенерировать файл. Вы также можете выбрать нужный тип диаграммы. У вас есть различные варианты, такие как гистограмма, линейная диаграмма, диаграмма с областями, кольцевая диаграмма, пузырьковая диаграмма, точечная диаграмма.

import java.io.File;


public class visualizer {
   

    public int firstattribute() {
        return assignment_attribute1;
    }
   

    public int secondattribute() {
        return assignment_attribute2;
    }
   

    public chartdata getDataset() {
        return assignment_dataset;
    }
   

    public String getHeader() {
        return assignment_header;
    }
   

    public String dataforxaxis() {
        return assignment_xAxis;
    }
   

    public String dataforyaxis() {
        return assignment_yAxis;
    }
   

    public boolean setAttribute1 (int attribute1) {
        assignment_attribute1 = attribute1;
        return true;
    }
   

    public boolean setAttribute2 (int attribute2) {
        assignment_attribute2 = attribute2;
        return true;
    }
   

   public boolean setDataset (chartdata dataset) {
        assignment_dataset = dataset;
        return true;
    }
   

    public boolean setHeader (String header) {
        assignment_header = header;
        return true;
    }
   

    public boolean setxAxis (String xAxis) {
        assignment_xAxis = xAxis;
        return true;
    }
   

    public boolean setyAxis (String yAxis) {
        assignment_yAxis = yAxis;
        return true;
    }
   
   private chartdata assignment_dataset;
    private int assignment_attribute1;
    private int assignment_attribute2;
    private String assignment_header;
    private String assignment_xAxis;
    private String assignment_yAxis;

   public static void main(String args[]){
      
      final int TEST_DATA = 100;
      

      System.out.println("Visualization:: Visualization()");
      visualizer testVisualization=new visualizer();
      System.out.println("Visualization:: Visualization() - Test Passed");
      

      chartdata testdataset = new chartdata();
      File inputfile = new File("test.csv");
      testdataset.BuildDataSet(inputfile);
      

      System.out.println("Visualization:: setDataset()");
      testVisualization.setDataset(testdataset);
      System.out.println("Visualization:: setDataset() - Test Passed");
      

      System.out.println("Visualization:: setAttribute1()");
      boolean testSetAttribute1=testVisualization.setAttribute1(TEST_DATA);
      System.out.println("Visualization:: setAttribute1() - Test Passed");
      

      System.out.println("Visualization:: setAttribute2()");
      boolean testSetAttribute2=testVisualization.setAttribute2(TEST_DATA);
      System.out.println("Visualization:: setAttribute2() - Test Passed");
      

      System.out.println("Visualization:: setHeader()");
      boolean testSetHeader=testVisualization.setHeader("Visulization");
      System.out.println("Visualization:: setHeader() - Test Passed");
      

      System.out.println("Visualization:: setxAxis()");
      boolean testSetxAxis=testVisualization.setxAxis("xAxis");
      System.out.println("Visualization:: setxAxis() - Test Passed");
      

      System.out.println("Visualization:: setyAxis()");
      boolean testSetyAxis=testVisualization.setyAxis("yAxis");
      System.out.println("Visualization:: setyAxis() - Test Passed");
      

      System.out.println("Visualization:: getDataset()");
      testVisualization.getDataset();
      System.out.println("Visualization:: getDataset() - Test Passed");
      

      System.out.println("Visualization:: firstattribute()");
      int testfirstattribute=testVisualization.firstattribute();
      System.out.println("Visualization:: firstattribute() - Test Passed");
      

      System.out.println("Visualization:: secondattribute()");
      int testsecondattribute=testVisualization.secondattribute();
      System.out.println("Visualization:: secondattribute() - Test Passed");
      

      System.out.println("Visualization:: getHeader()");
      String testGetHeader=testVisualization.getHeader();
      System.out.println("Visualization:: getHeader() - Test Passed");
      

      System.out.println("Visualization:: dataforxaxis()");
      String dataforxaxis=testVisualization.dataforxaxis();
      System.out.println("Visualization:: dataforxaxis - Test Passed");
      

      System.out.println("Visualization:: dataforyaxis()");
      String testdataforyaxis=testVisualization.dataforyaxis();
      System.out.println("Visualization:: dataforyaxis() - Test Passed");
   }
   
} /* End of Visualization Class */

Итак, теперь вы решили, какой файл открыть и какую диаграмму хотите нарисовать, так что теперь давайте поговорим обо всех доступных диаграммах.

ChartData.java

Это поможет нам визуализировать диаграмму, вводя в нее данные. Здесь мы также находим имена столбцов, и мы сможем разделить данные на целые числа и строки.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.JPanel;



public class chartdata {


    public String GetAttributeName(int columnNo){

        if (columnNo < assignment_attributeCount) {
            return assignment_attributes[columnNo];
        } else {
             JPanel frame = new JPanel();
             JOptionPane.showMessageDialog(frame,
                 "Data Out Of Bound",
                 "Error",
                 JOptionPane.ERROR_MESSAGE);
         }
        return null;
    }
   

    public String[] GetAttributes() {
            
        return assignment_attributes;
    }
   

    public Object[] GetColumnData(int columnNo){

        if (columnNo < assignment_attributeCount) {
            assignment_columnData = new Object[assignment_entryCount];
            for(int i = 0; i<assignment_entryCount; i++){
                assignment_columnData[i] = assignment_data[i][columnNo];
            }
            return assignment_columnData;
        } else {
         JPanel frame = new JPanel();
         JOptionPane.showMessageDialog(frame,
                "Column Index out of bounds",
                "File error",
                JOptionPane.ERROR_MESSAGE);
        }
        return null;
    }
   

    public Object [][] GetData() {  
        return assignment_data;
    }
   

    public int GetNoOfAttributes(){
        return assignment_attributeCount;
    }
   

    public int GetNoOfEntrys(){
        return assignment_entryCount;
    
    }
   

    public Boolean BuildDataSet (File dataFile) {
        
      boolean test = false;
      
        if(!checkForValidFile(dataFile)){
            return false;
        }
        
        try {
            assignment_fileScan = new Scanner(dataFile);
        } catch (FileNotFoundException e) {
        }
        
        assignment_attributes = new String[assignment_attributeCount];
        assignment_lineScanner = new Scanner(assignment_fileScan.nextLine());
        assignment_lineScanner.useDelimiter(assignment_delimiter);

        {
            int i=0;
            while (i<assignment_attributeCount) {
                assignment_attributes[i]=assignment_lineScanner.next();
                i++;
            }
        }
        
        assignment_data = new Object[assignment_entryCount][assignment_attributeCount];

        int i=0;
        while (i<assignment_entryCount) {
            assignment_lineScanner = new Scanner(assignment_fileScan.nextLine());
            assignment_lineScanner.useDelimiter(assignment_delimiter);

            int n=0;
            while (n<assignment_attributeCount) {
                if(!(assignment_lineScanner.hasNext())){
                    i--;
                    break;
                }

                assignment_dataEntry=assignment_lineScanner.next();
                switch (assignment_dataEntry) {
                    case "" -> n--;
                    default -> assignment_data[i][n] = assignment_dataEntry;
                }
                n++;
            }
            i++;
        }
        if (test) {
         System.out.println("Data Set Built");
      }
        return true;
    }
   

    private boolean checkForAttributes(File dataFile) {
      
        try {
            assignment_fileScan = new Scanner(dataFile);
        } catch (FileNotFoundException e) {
         return false;
        }
        assignment_delimiter=",";
        assignment_lineScanner= new Scanner(assignment_fileScan.nextLine());
        assignment_lineScanner.useDelimiter(assignment_delimiter);
        
        while(assignment_lineScanner.hasNext()){
            try {  
                Double.parseDouble(assignment_lineScanner.next());
            } catch(NumberFormatException nfe) {  
                return true;  
            }
        }
        return false; 
    }
   

    private Boolean checkForCommas (File dataFile) {
        
        assignment_delimiter="";
        
        try {
            assignment_fileScan = new Scanner(dataFile);
        } catch (FileNotFoundException e) {
         return false;
        }
        assignment_fileScan.useDelimiter(assignment_delimiter);

        if (!assignment_fileScan.hasNext()) {
            return false;
        }
        do {
            String assignment_charCheck = assignment_fileScan.next();
            if (!assignment_charCheck.equals(",")) {
            } else {
                return true;
            }
        } while (assignment_fileScan.hasNext());
        return false;
    }
   

    private boolean checkForConsistentData(File dataFile) {
      
        try {
            assignment_fileScan = new Scanner(dataFile);
        } catch (FileNotFoundException e) {
        }
        
        assignment_entryCount=0;
        assignment_attributeCount=countAttributes(dataFile);
        assignment_delimiter=",";

        if (assignment_fileScan.hasNextLine()) {
            do {
                assignment_lineScanner = new Scanner(assignment_fileScan.nextLine());
                assignment_lineScanner.useDelimiter(assignment_delimiter);
                assignment_lineDataCount = 0;
                assignment_emptyEntryCount = 0;

                if (assignment_lineScanner.hasNext()) {
                    do {
                        assignment_dataEntry = assignment_lineScanner.next();
                        if (assignment_dataEntry.equals("")) {
                            assignment_emptyEntryCount++;
                        }
                        assignment_lineDataCount++;
                    } while (assignment_lineScanner.hasNext());
                }

                if (assignment_lineDataCount - assignment_emptyEntryCount == assignment_attributeCount) {
                } else {
                    if (!(assignment_lineDataCount - assignment_emptyEntryCount == 0)) {
                        return false;
                    } else {
                        assignment_entryCount--;
                    }
                }
                assignment_entryCount++;
            } while (assignment_fileScan.hasNextLine());
        }
        return true;
    }
   

    private Boolean checkForValidFile(File dataFile){
        
        final JPanel frame = new JPanel();
        if (checkForCommas(dataFile)) {
            if (!checkForAttributes(dataFile)) {
                JOptionPane.showMessageDialog(frame,
                        "File Corrupted",
                        "Error",
                        JOptionPane.ERROR_MESSAGE);
                return false;
            }

            if (!checkForConsistentData(dataFile)) {
                JOptionPane.showMessageDialog(frame,
                        "Missing Values In Some Cells",
                        "Error",
                        JOptionPane.ERROR_MESSAGE);
                return false;
            }
            return true;
        } else {
            JOptionPane.showMessageDialog(frame,
                    "There are no Commas In File",
                    "Error",
                    JOptionPane.ERROR_MESSAGE);
            return false;
        }

    }
   

    private int countAttributes(File dataFile) {

        assignment_numberOfAttributes = 0;
        assignment_delimiter=",";

        try {
            assignment_fileScan = new Scanner(dataFile);
        } catch (FileNotFoundException e) {
        }
        assignment_lineScanner = new Scanner(assignment_fileScan.nextLine());
        assignment_lineScanner.useDelimiter(assignment_delimiter);
        while(assignment_lineScanner.hasNext()){
         assignment_lineScanner.next();
            assignment_numberOfAttributes++;
        }
        return assignment_numberOfAttributes;
    }
      

    private Scanner assignment_fileScan;


    private String assignment_delimiter;


    private Scanner assignment_lineScanner;


    private int assignment_attributeCount;


    private int assignment_entryCount;


    private int assignment_lineDataCount;


    private String[] assignment_attributes;


    private Object[][] assignment_data;


    private String assignment_dataEntry;


    private int assignment_emptyEntryCount;


    private Object[] assignment_columnData;


    private int assignment_numberOfAttributes;

       public static void main(String[] args) {
      //Test Class
      chartdata testDataSet = new chartdata();
      //Test One
      System.out.println("DataSet:: GetData()");
      Object[][] test1Object = testDataSet.GetData();
      System.out.println("DataSet:: GetData() - Test Passed");
      //Test Two
      System.out.println("DataSet:: GetAttirbutes()");
      String[] test2Attributes = testDataSet.GetAttributes();
      System.out.println("DataSet:: GetAttributes() - Test Passed");
        //Test Three
      System.out.println("DataSet:: GetColumnData(2) - No File");
      Object[] test3Object = testDataSet.GetColumnData(2);
      //Getting random information from a testDataSet
      //No file has been given, so no data should exist.
      //Expecting null.
      if (test3Object == null) {
         System.out.println("DataSet:: GetColumnData(2) - Test Passed");
      } else {
         System.out.println("DataSet:: GetColumnData(2) - Unexpected Error");
         System.out.println(test3Object);
      }
      //Test Four
      System.out.println("DataSet:: GetAttributeName(2)");
      String test4AttributeName = testDataSet.GetAttributeName(2);
      //Getting random information from a testDataSet
      //No File - Expecting null
      if (test4AttributeName == null) {
         System.out.println("DataSet:: GetAttributeName(2) - Test Passed");
      } else {
         System.out.println("DataSet:: GetAttributeName(2) - Test Failed");
         System.out.println(test4AttributeName);
      }
      //Test Five
      System.out.println("DataSet:: GetNoOfEntrys()");
      int test5entries = testDataSet.GetNoOfEntrys();
      System.out.println("DataSet:: GetNoOfEntrys() - Test Passed");
      //Test Six
      System.out.println("DataSet:: GetNoOfAttributes()");
      int test6entries = testDataSet.GetNoOfAttributes();
      System.out.println("DataSet:: GetNoOfAttributes() - Test Passed");

      System.out.println("DataSet:: BuildDataSet(Typical File)");
      File inputfile = new File("test.csv");

      //Test Seven
      boolean test7 = testDataSet.BuildDataSet(inputfile);
      if (test7) {
         System.out.println("DataSet:: BuildDataSet - Test Passed");
      } else {
         System.out.println("DataSet:: BuildDataSet - Unexpected Error");
      }
      //Test Eight
      System.out.println("DataSet:: GetNoOfEntrys()");
      int test8entries = testDataSet.GetNoOfEntrys();
      final int ENTRIES = 11;
      if (test8entries == ENTRIES) {
         System.out.println("DataSet:: GetNoOfEntrys() - Test Passed");
      } else {
         System.out.println("DataSet:: GetNoOfEntrys() - Test Failed");
         System.out.println(test8entries);
      }
      //Test Nine
      System.out.println("DataSet:: GetNoOfAttributes()");
      int test9entries = testDataSet.GetNoOfAttributes();
      final int ATTRIBUTES = 2;
      if (test9entries == ATTRIBUTES) {
         System.out.println("DataSet:: GetNoOfAttributes() - Test Passed");
      } else {
         System.out.println("DataSet:: GetNoOfAttributes() - Test Failed");
         System.out.println(test9entries);
      }
   }
}

Я также добавил здесь некоторый отказоустойчивый метод:

  1. Если файл поврежден, он покажет сообщение об ошибке и не откроет файл.
  2. Если в файле есть какие-то пропущенные значения, он покажет вам ошибку. Говорит, что есть некоторые пропущенные значения.
  3. Если вы пытаетесь открыть файл PDF или Word или что-то еще, кроме файла csv, он покажет вам ошибку, говорящую о том, что в файле нет запятых.

ChartGenerator.java

Это генератор диаграмм, он спросит вас, какую диаграмму вы хотите визуализировать, и вы сможете выбрать из различных типов диаграмм.

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.RingPlot;
import org.jfree.chart.title.DateTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.PieDataset;

import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Date;


public class chartgenerator extends JPanel {


    final private int B_ROW = 4;
    final private int B_COL = 2;
    final private int H_GAP = 5;
    final private int V_GAP = 5;
    final private int WIDTH = 650;
    final private int HEIGHT = 230;
    final private int NOCHART = -1;
    final private int BARCHART = 0;
    final private int LINECHART = 2;
    final private int RINGCHART = 3;
    final private int AREACHART = 4;
    final private int NUMOFCHARTS = 7;
    private final int DAY = 24;
    private final int MILLISECOND = 1000;
    private final int MINUTE = 60;
    private final int HOUR = 3600;
    private final int FORMATTING = 2;
    private JComboBox assingmnet_attributeDropdownBar1;
    private JComboBox assingmnet_attributeDropdownBar2;

    private JTextField menubar123Header;
    private JTextField assingmnet_pieHeader;
    private JButton assingmnet_generateBarButton;
    private JButton assingmnet_generateLineButton;
    private JButton assingmnet_generateRingButton;
    private JButton assingmnet_generateAreaButton;
    private chartdata assignment_dataset;
    private ChartPanel assingmnet_frame;
    private JFrame assingmnet_window;
    private int assingmnet_chartType;
    private JFreeChart assingmnet_chart;
    private final chartdata assingmnet_data;
    public chartgenerator(chartdata data) {

        super(new GridLayout(1, 0));

        assingmnet_data = data;
        assingmnet_chartType = -1;
        assingmnet_chart = null;

    }

    public static void main(String[] args) {

        chartdata testdataset = new chartdata();
        File inputfile = new File("test.csv");
        testdataset.BuildDataSet(inputfile);
        System.out.println("Chart:: Chart()");
        chartgenerator testChart = new chartgenerator(testdataset);
        System.out.println("Chart:: Chart() - Test Passed");
        System.out.println("Chart:: SetWindowVisible()");
        testChart.SetWindowVisible();
        System.out.println("Chart:: SetWindowVisible() - Test Passed");
        System.out.println("Chart:: DisposeWindow()");
        testChart.DisposeWindow();
        System.out.println("Chart:: DisposeWindow() - Test Passed");
    }

    public int GetChartType() {
        return (assingmnet_chartType);
    }

    public boolean SetChartType(int type) {

        if ((type >= 0) && (type < NUMOFCHARTS)) {
            assingmnet_chartType = type;
            return (true);
        } else {
            return (false);
        }
    }

    public JFreeChart GetChart() {
        return (assingmnet_chart);
    }

    public void SetChart(JFreeChart chart) {
        assingmnet_chart = chart;
    }

    public String ConvertTime(long timeMillis) {
        long elapsedTime = timeMillis;
        String format = String.format("%%0%dd", FORMATTING);
        elapsedTime = elapsedTime / MILLISECOND;
        String seconds = String.format(format, elapsedTime % MINUTE);
        String minutes = String.format(format, (elapsedTime % HOUR) / MINUTE);

        int hoursTime = (int) (elapsedTime / HOUR);

        while (hoursTime > DAY) {
            hoursTime = hoursTime - DAY;
        }
        hoursTime++;

        String hours = String.format(format, hoursTime);
        String time = hours + ":" + minutes;// + ":" + seconds;
        return time;
    }

    public void DisposeWindow() {
        assingmnet_window.dispose();
    }

    public void SetWindowVisible() {
        Object[] possibleValues = new Object[NUMOFCHARTS];
        possibleValues[BARCHART] = "Bar Chart";
        possibleValues[LINECHART] = "Line Chart";
        possibleValues[RINGCHART] = "Ring Chart";
        possibleValues[AREACHART] = "Area Chart";


        Object selectedValue = JOptionPane.showInputDialog(null,
                "Type Of Chart", "Covid-19 visualizer",
                JOptionPane.INFORMATION_MESSAGE, null,
                possibleValues, possibleValues[BARCHART]);

        if (selectedValue == null) {

        } else if (selectedValue == possibleValues[BARCHART]) {
            SetUpBarChart(assingmnet_data);
        }  else if (selectedValue == possibleValues[LINECHART]) {
            SetUpLineChart(assingmnet_data);
        } else if (selectedValue == possibleValues[RINGCHART]) {
            SetUpRingChart(assingmnet_data);
        } else if (selectedValue == possibleValues[AREACHART]) {
            SetUpAreaChart(assingmnet_data);
        }

        if (selectedValue != null) {
            assingmnet_window.setVisible(true);
            assingmnet_window.setLocationRelativeTo(null);
        }
    }

    public boolean SetUpAreaChart(chartdata data) {
        assignment_dataset = data;
        assingmnet_chartType = NOCHART;
        assingmnet_chart = null;
        assingmnet_window = new JFrame("Select Data");
        assingmnet_window.setSize(WIDTH, HEIGHT);
        assingmnet_window.setResizable(false);
        assingmnet_window.setLayout(new FlowLayout());

        JPanel areaPanel = new JPanel(new GridLayout(B_ROW, B_COL, H_GAP, V_GAP));
        assingmnet_window.add(areaPanel);



        Border areaPanelBorder = BorderFactory
                .createTitledBorder("Area Chart");
        areaPanel.setBorder(areaPanelBorder);

        String[] assingmnet_modelString = new String[data.GetNoOfAttributes()];

        for (int i = 0; i < data.GetNoOfAttributes(); i++) {
            assingmnet_modelString[i] = data.GetAttributeName(i);
        }

        JLabel label = new JLabel("X: Axis (Date Only)");
        areaPanel.add(label);
        assingmnet_attributeDropdownBar1 = new JComboBox(assingmnet_modelString);
        assingmnet_attributeDropdownBar1.setMaximumRowCount(data.GetNoOfAttributes());
        areaPanel.add(assingmnet_attributeDropdownBar1);
        label = new JLabel("Y:Axis (Integer Value Only)");
        areaPanel.add(label);
        assingmnet_attributeDropdownBar2 = new JComboBox(assingmnet_modelString);
        assingmnet_attributeDropdownBar2.setMaximumRowCount(data.GetNoOfAttributes());
        areaPanel.add(assingmnet_attributeDropdownBar2);

        menubar123Header = new JTextField("Covid-19 Area Chart");
        areaPanel.add(menubar123Header);



        assingmnet_generateAreaButton = new JButton("Generate");

        areaPanel.add(assingmnet_generateAreaButton);

        GUIEventHandler assingmnet_eventHandeler = new GUIEventHandler();
        assingmnet_generateAreaButton.addActionListener(assingmnet_eventHandeler);

        return true;
    }

    public boolean SetUpBarChart(chartdata data) {

        assignment_dataset = data;
        assingmnet_chartType = NOCHART;
        assingmnet_chart = null;
        assingmnet_window = new JFrame("Select Data ");
        assingmnet_window.setSize(WIDTH, HEIGHT);
        assingmnet_window.setResizable(false);
        assingmnet_window.setLayout(new FlowLayout());

        JPanel barPanel = new JPanel(new GridLayout(B_ROW, B_COL, H_GAP, V_GAP));
        assingmnet_window.add(barPanel);



        Border barPanelBorder = BorderFactory
                .createTitledBorder("Bar Chart");
        barPanel.setBorder(barPanelBorder);

        String[] assingmnet_modelString = new String[data.GetNoOfAttributes()];

        for (int i = 0; i < data.GetNoOfAttributes(); i++) {
            assingmnet_modelString[i] = data.GetAttributeName(i);
        }

        JLabel label = new JLabel("X:Axis (Date Only)");
        barPanel.add(label);
        assingmnet_attributeDropdownBar1 = new JComboBox(assingmnet_modelString);
        assingmnet_attributeDropdownBar1.setMaximumRowCount(data.GetNoOfAttributes());
        barPanel.add(assingmnet_attributeDropdownBar1);
        label = new JLabel("Y:Axis (Integer Value Only)");
        barPanel.add(label);
        assingmnet_attributeDropdownBar2 = new JComboBox(assingmnet_modelString);
        assingmnet_attributeDropdownBar2.setMaximumRowCount(data.GetNoOfAttributes());
        barPanel.add(assingmnet_attributeDropdownBar2);
        menubar123Header = new JTextField("Covid-19 Bar Chart");
        barPanel.add(menubar123Header);


        assingmnet_generateBarButton = new JButton("Generate");

        barPanel.add(assingmnet_generateBarButton);

        GUIEventHandler assingmnet_eventHandeler = new GUIEventHandler();
        assingmnet_generateBarButton.addActionListener(assingmnet_eventHandeler);

        return true;
    }



    public boolean SetUpLineChart(chartdata data) {
        assignment_dataset = data;
        assingmnet_chartType = NOCHART;
        assingmnet_chart = null;
        assingmnet_window = new JFrame("Select Data");
        assingmnet_window.setSize(WIDTH, HEIGHT);
        assingmnet_window.setResizable(false);
        assingmnet_window.setLayout(new FlowLayout());

        JPanel linePanel = new JPanel(new GridLayout(B_ROW, B_COL, H_GAP, V_GAP));
        assingmnet_window.add(linePanel);


        Border linePanelBorder = BorderFactory
                .createTitledBorder("Line Chart");
        linePanel.setBorder(linePanelBorder);

        String[] assingmnet_modelString = new String[data.GetNoOfAttributes()];

        for (int i = 0; i < data.GetNoOfAttributes(); i++) {
            assingmnet_modelString[i] = data.GetAttributeName(i);
        }

        JLabel label = new JLabel("X:Axis (Date Only)");
        linePanel.add(label);
        assingmnet_attributeDropdownBar1 = new JComboBox(assingmnet_modelString);
        assingmnet_attributeDropdownBar1.setMaximumRowCount(data.GetNoOfAttributes());
        linePanel.add(assingmnet_attributeDropdownBar1);
        label = new JLabel("Y:Axis (Integer Value Only)");
        linePanel.add(label);
        assingmnet_attributeDropdownBar2 = new JComboBox(assingmnet_modelString);
        assingmnet_attributeDropdownBar2.setMaximumRowCount(data.GetNoOfAttributes());
        linePanel.add(assingmnet_attributeDropdownBar2);

        menubar123Header = new JTextField("Covid_19 Line Chart");
        linePanel.add(menubar123Header);



        assingmnet_generateLineButton = new JButton("Generate");

        linePanel.add(assingmnet_generateLineButton);

        GUIEventHandler assingmnet_eventHandeler = new GUIEventHandler();
        assingmnet_generateLineButton.addActionListener(assingmnet_eventHandeler);

        return true;
    }



    public boolean SetUpRingChart(chartdata data) {
        assignment_dataset = data;
        assingmnet_chartType = NOCHART;
        assingmnet_chart = null;
        assingmnet_window = new JFrame("Select Data");
        assingmnet_window.setSize(WIDTH, HEIGHT);
        assingmnet_window.setResizable(false);
        assingmnet_window.setLayout(new FlowLayout());

        JPanel ringPanel = new JPanel(new GridLayout(B_ROW, B_COL, H_GAP, V_GAP));
        assingmnet_window.add(ringPanel);



        Border ringPanelBorder = BorderFactory
                .createTitledBorder("Ring Chart");
        ringPanel.setBorder(ringPanelBorder);

        String[] assingmnet_modelString = new String[data.GetNoOfAttributes()];

        for (int i = 0; i < data.GetNoOfAttributes(); i++) {
            assingmnet_modelString[i] = data.GetAttributeName(i);
        }

        JLabel label = new JLabel("X:Axis (Date Only)");
        ringPanel.add(label);
        assingmnet_attributeDropdownBar1 = new JComboBox(assingmnet_modelString);
        assingmnet_attributeDropdownBar1.setMaximumRowCount(data.GetNoOfAttributes());
        ringPanel.add(assingmnet_attributeDropdownBar1);
        label = new JLabel("Y:Axis (Integer Value)");
        ringPanel.add(label);
        assingmnet_attributeDropdownBar2 = new JComboBox(assingmnet_modelString);
        assingmnet_attributeDropdownBar2.setMaximumRowCount(data.GetNoOfAttributes());
        ringPanel.add(assingmnet_attributeDropdownBar2);
        menubar123Header = new JTextField("Covid_19 Ring Chart");
        ringPanel.add(menubar123Header);


        assingmnet_generateRingButton = new JButton("Generate");

        ringPanel.add(assingmnet_generateRingButton);

        GUIEventHandler assingmnet_eventHandeler = new GUIEventHandler();
        assingmnet_generateRingButton.addActionListener(assingmnet_eventHandeler);

        return true;
    }



    private class GUIEventHandler implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent event) {
            if (event.getSource() == assingmnet_generateBarButton) {
                generateBarChart();
            }  else if (event.getSource() == assingmnet_generateLineButton) {
                generateLineChart();
            } else if (event.getSource() == assingmnet_generateRingButton) {
                generateRingChart();
            } else if (event.getSource() == assingmnet_generateAreaButton) {
                generateAreaChart();
            }
        }


        public boolean generateAreaChart() {
            int A1 = assingmnet_attributeDropdownBar1.getSelectedIndex();
            int A2 = assingmnet_attributeDropdownBar2.getSelectedIndex();
            String header = menubar123Header.getText();

            areachart areaChart = new areachart(assignment_dataset);
            areaChart.setDataset(assignment_dataset);
            areaChart.setAttribute1(A1);
            areaChart.setAttribute2(A2);
            areaChart.setHeader(header);
            areaChart.setxAxis(assignment_dataset.GetAttributeName(A1));
            areaChart.setyAxis(assignment_dataset.GetAttributeName(A2));
            JFreeChart chart = areaChart.generatechart();



            areacoloured renderer = new areacoloured(
                    gui.assignment_chartmaker.GetActiveMap());
            CategoryPlot plot = (CategoryPlot) chart.getPlot();
            renderer.SetColor(plot, 1);
            plot.setForegroundAlpha(0.5f);
            SetChartType(AREACHART);
            SetChart(chart);
            assingmnet_frame = new ChartPanel(chart);
            removeAll();
            add(assingmnet_frame);
            repaint();
            revalidate();
            GroupJVTApplication.dataVisualizer.ActivateColour();
            GroupJVTApplication.dataVisualizer.SelectChartTab();
            assingmnet_window.setVisible(false);
            return true;
        }


        public boolean generateBarChart() {
            int A1 = assingmnet_attributeDropdownBar1.getSelectedIndex();
            int A2 = assingmnet_attributeDropdownBar2.getSelectedIndex();
            String header = menubar123Header.getText();


            barchart barChart = new barchart(assignment_dataset);
            barChart.setDataset(assignment_dataset);
            barChart.setAttribute1(A1);
            barChart.setAttribute2(A2);
            barChart.setHeader(header);
            barChart.setxAxis(assignment_dataset.GetAttributeName(A1));
            barChart.setyAxis(assignment_dataset.GetAttributeName(A2));
            JFreeChart chart = barChart.generatechart();
            DateTitle dateTitle = new DateTitle();
            Date now = new Date();
            String dateAndTime = dateTitle.getText();
            dateAndTime = dateAndTime + "\n" + ConvertTime(now.getTime());
            dateTitle.setText(dateAndTime);
            chart.addSubtitle(dateTitle);



            barcoloured renderer = new barcoloured(
                    gui.assignment_chartmaker.GetActiveMap());
            CategoryPlot plot = (CategoryPlot) chart.getPlot();
            CategoryDataset barDataset = plot.getDataset();
            for (int i = 1; i <= barDataset.getRowCount(); i++) {
                renderer.SetColor(plot, i);
            }


            assingmnet_frame = new ChartPanel(chart);
            SetChartType(BARCHART);
            SetChart(chart);
            removeAll();
            add(assingmnet_frame);
            repaint();
            revalidate();
            GroupJVTApplication.dataVisualizer.ActivateColour();
            GroupJVTApplication.dataVisualizer.SelectChartTab();
            assingmnet_window.setVisible(false);
            return true;
        }




        public boolean generateLineChart() {
            int A1 = assingmnet_attributeDropdownBar1.getSelectedIndex();
            int A2 = assingmnet_attributeDropdownBar2.getSelectedIndex();
            String header = menubar123Header.getText();

            linechart lineChart = new linechart(assignment_dataset);
            lineChart.setDataset(assignment_dataset);
            lineChart.setAttribute1(A1);
            lineChart.setAttribute2(A2);
            lineChart.setHeader(header);
            lineChart.setxAxis(assignment_dataset.GetAttributeName(A1));
            lineChart.setyAxis(assignment_dataset.GetAttributeName(A2));
            JFreeChart chart = lineChart.generatechart();


            linecoloured renderer = new linecoloured(
                    gui.assignment_chartmaker.GetActiveMap());
            CategoryPlot plot = (CategoryPlot) chart.getPlot();
            renderer.SetColor(plot, 1);
            SetChartType(LINECHART);
            SetChart(chart);
            assingmnet_frame = new ChartPanel(chart);
            removeAll();
            add(assingmnet_frame);
            repaint();
            revalidate();
            GroupJVTApplication.dataVisualizer.ActivateColour();
            GroupJVTApplication.dataVisualizer.SelectChartTab();
            assingmnet_window.setVisible(false);
            return true;
        }





        public boolean generateRingChart() {
            int A1 = assingmnet_attributeDropdownBar1.getSelectedIndex();
            int A2 = assingmnet_attributeDropdownBar2.getSelectedIndex();
            String header = menubar123Header.getText();

            ringchart ring = new ringchart(assignment_dataset);
            ring.setAttribute1(A1);
            ring.setAttribute2(A2);
            ring.setHeader(header);
            JFreeChart chart = ring.generatechart();


            RingPlot plot = (RingPlot) chart.getPlot();
            PieDataset dataset = plot.getDataset();

            ringcoloured renderer = new ringcoloured(
                    gui.assignment_chartmaker.GetActiveMap());
            renderer.SetColor(plot, dataset);
            SetChartType(RINGCHART);
            SetChart(chart);
            assingmnet_frame = new ChartPanel(chart);
            removeAll();
            add(assingmnet_frame);
            repaint();
            revalidate();
            GroupJVTApplication.dataVisualizer.ActivateColour();
            GroupJVTApplication.dataVisualizer.SelectChartTab();
            assingmnet_window.setVisible(false);
            return true;
        }


    }

} /* end Chart class */

AreaChart.java

Для построения диаграммы с областями я буду использовать библиотеку JFreeChart, с ней проще работать и у нее много доступных опций. И это также дает вам большую гибкость, чем другие. Скачать библиотеку jFreeChart можно здесь: нажмите здесь!

arechart.java

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

import javax.swing.*;
import java.io.File;


public class areachart extends visualizer {


    private final Double TRUE = 1.0;
    private final Double FALSE = 0.0;
    private final int MAX_ERROR_LENGTH = 5;

    public areachart(chartdata inputdataset) {
        super.setDataset(inputdataset);
    }

    public static void main(String[] args) {
        chartdata testdataset = new chartdata();
        File inputfile = new File("test.csv");
        testdataset.BuildDataSet(inputfile);

        System.out.println("AreaChart:: AreaChart()");
        areachart testAreaChart = new areachart(testdataset);
        System.out.println("AreaChart::BarChart()- Test Passed");

        System.out.println("AreaChart:: generatechart()");
        testAreaChart.generatechart();
        System.out.println("AreaChart::generatechart()- Test Passed");
    }

    public JFreeChart generatechart() {

        DefaultCategoryDataset areaDataset = new DefaultCategoryDataset();

        Object[] column1Data = super.getDataset().GetColumnData(
                super.firstattribute());
        Object[] column2Data = super.getDataset().GetColumnData(
                super.secondattribute());

        String column2Header = super.getDataset().GetAttributeName(
                super.secondattribute());

        boolean addDataset = true;
        String errors = "";
        int errorCounter = 0;

        int i = 0;
        while (i < super.getDataset().GetNoOfEntrys()) {

            Comparable<Object> nextValue1;
            //First value can have be any comparable object.

            nextValue1 = (Comparable<Object>) column1Data[i];
            Double nextValue2 = null;
            boolean addThis = true;
            //Second value can only be integer, double or boolean.

            try {
                int intNextValue2 = Integer.parseInt(column2Data[i].toString());
                nextValue2 = (Double) ((double) intNextValue2);
            } catch (NumberFormatException nfe) {
                try {
                    double doubleNextValue2 = Double.parseDouble(
                            column2Data[i].toString());
                    nextValue2 = doubleNextValue2;
                } catch (NumberFormatException nfe2) {
                    String strNextValue2 = column2Data[i].toString();
                    if (!strNextValue2.equalsIgnoreCase("True")) {
                        if (strNextValue2.equalsIgnoreCase("False")) {
                            nextValue2 = FALSE;
                        } else {
                            addThis = false;
                        }
                    } else {
                        nextValue2 = TRUE;
                    }
                }
            } catch (Exception e) {
                addThis = false;
            }

            if (addThis == true) {
                areaDataset.addValue(nextValue2, column2Header, nextValue1);
            } else {
                addDataset = false;
                if (errorCounter >= MAX_ERROR_LENGTH) {
                } else {
                    errors = errors + "\n"
                            + column2Data[i].toString();
                    errorCounter++;
                }
            }
            i++;
        }

        if (addDataset != false) {
        } else {
            areaDataset = new DefaultCategoryDataset(); //Reset
            JOptionPane.showMessageDialog(null,
                    "Y-axis is a string, please select an integer value" + "\n"
                            + errors);
        }

        JFreeChart chart = ChartFactory.createAreaChart(
                super.getHeader(),
                super.dataforxaxis(),
                super.dataforyaxis(),
                areaDataset,
                PlotOrientation.VERTICAL,
                true, //include legend
                true,
                false);
        return chart;
    }

}

/*end AreaChart class */

Эта программа говорит сама за себя, мне не нужно в нее углубляться, если у вас есть базовое представление о визуализации данных в java или python, вы можете ее понять.

После выполнения вот что вы увидите:

Поскольку у меня уже есть файл, открытый в моем графическом интерфейсе, теперь я выберу входные данные. (Еще одна вещь, которую я забыл упомянуть, когда вы открываете файл, программа автоматически читает все столбцы.)

После этого я нажму «Создать» и «Уолла», у нас есть диаграмма.

Поскольку это пример файла, я работаю с небольшим CSV-файлом, но вы можете сделать его настолько большим, насколько хотите, CSV-файл содержит следующие данные:

После этого у вас есть возможность сохранить диаграмму, скопировать диаграмму, изменить свойства, распечатать диаграмму, увеличить масштаб, и если вы увеличите масштаб, у вас будет возможность уменьшить масштаб, эта опция станет доступной, когда вы щелкните правой кнопкой мыши на диаграмме: (код ибо это ниже!)

Когда вы выбираете свойства: (код для свойств ниже!)

У вас есть возможность изменить текст, цвет, цвет фона, цвет диаграммы, используемый шрифт и все остальное. Если вы хотите изменить цвет диаграммы, я сделал доступной опцию rgb, так что вы можете выбрать что угодно. Для шрифтов вы можете выбрать любые шрифты, библиотеку шрифтов, которую я использую, ту же библиотеку, что и Microsoft Word.

Выберите цвет

Это дает нам возможность выбирать/изменять цвета в соответствии с нашими потребностями, изображение выше, на котором вы видите селектор цвета, помогает нам в этом.

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.Border;


public class choosecolour extends JFrame {
   

    public choosecolour() {
        integermaps();
        InitGUI();
      this.setLocationRelativeTo(null);
        setSize(new Dimension(Cassingmnet_WIDTH, Cassingmnet_HEIGHT));
        setTitle("Colour Options");
    }
    

    public void CloseFrame() {
        setVisible(false);
    }
   

    public newcolours GetActiveMap() {
        if (assingmnet_activeMap == CUSTOM) {
         return assingmnet_custom;
      } else {
         return(assingmnet_colourMaps[assingmnet_activeMap]);
      }
    }
   

    public barcoloured GetBarRenderer() {
        return(menubar123Renderer);
    }




   

    public newcolours colourmap(int mapIndex) {
        return(assingmnet_colourMaps[mapIndex]);
    }
   




   public linecoloured GetLineRenderer() {
      return(assingmnet_lineRenderer);
   }
   

   public ringcoloured GetRingRenderer() {
      return(assingmnet_ringRenderer);
   }
   




   

   

    public JPanel DrawSwatches(int mapIndex) {
        
        JPanel swatchPanel = new JPanel();
        Border swatchPanelBorder = BorderFactory.createTitledBorder("Preview");
        swatchPanel.setBorder(swatchPanelBorder);

        Dimension swatchSize = new Dimension(S_WIDTH, S_HEIGHT);
        int borderWidth = 1;
        Color borderColour = Color.black;

        Border swatchOutline = BorderFactory.createMatteBorder(
         borderWidth,
         borderWidth,
         borderWidth,
         borderWidth,
         borderColour );
      
      Color colour;
      
      if (mapIndex == CUSTOM) {
         
         for (int colourIndex=0; colourIndex<MAPCOUNT; colourIndex++) {
                if (colourIndex == 0 || colourIndex == 2) {
                    JPanel colour1 = new JPanel();
                    colour1.setSize(swatchSize);
                    colour1.setBorder(swatchOutline);
                    colour = assingmnet_custom.choosecolour(colourIndex)
                            .choosecolour();
                    colour1.setBackground(colour);
                    swatchPanel.add(colour1);
                } else if (colourIndex == 1) {
                    JPanel colour2 = new JPanel();
                    colour2.setSize(swatchSize);
                    colour2.setBorder(swatchOutline);
                    colour = assingmnet_custom.choosecolour(colourIndex)
                            .choosecolour();
                    colour2.setBackground(colour);
                    swatchPanel.add(colour2);
                } else if (colourIndex == 3) {
                    JPanel colour4 = new JPanel();
                    colour4.setSize(swatchSize);
                    colour4.setBorder(swatchOutline);
                    colour = assingmnet_custom.choosecolour(colourIndex)
                            .choosecolour();
                    colour4.setBackground(colour);
                    swatchPanel.add(colour4);
                } else if (colourIndex == 4) {
                    JPanel colour5 = new JPanel();
                    colour5.setSize(swatchSize);
                    colour5.setBorder(swatchOutline);
                    colour = assingmnet_custom.choosecolour(colourIndex)
                            .choosecolour();
                    colour5.setBackground(colour);
                    swatchPanel.add(colour5);
                }
         }
         
      } else {
         
         newcolours map = colourmap(mapIndex);
         
         for (int colourIndex=0; colourIndex<MAPCOUNT; colourIndex++) {
                if (colourIndex == 0) {
                    JPanel colour1 = new JPanel();
                    colour1.setSize(swatchSize);
                    colour1.setBorder(swatchOutline);
                    colour = map.choosecolour(colourIndex)
                            .choosecolour();
                    colour1.setBackground(colour);
                    swatchPanel.add(colour1);
                } else if (colourIndex == 1) {
                    JPanel colour2 = new JPanel();
                    colour2.setSize(swatchSize);
                    colour2.setBorder(swatchOutline);
                    colour = map.choosecolour(colourIndex)
                            .choosecolour();
                    colour2.setBackground(colour);
                    swatchPanel.add(colour2);
                } else if (colourIndex == 2) {
                    JPanel colour3 = new JPanel();
                    colour3.setSize(swatchSize);
                    colour3.setBorder(swatchOutline);
                    colour = map.choosecolour(colourIndex)
                            .choosecolour();
                    colour3.setBackground(colour);
                    swatchPanel.add(colour3);
                } else if (colourIndex == 3) {
                    JPanel colour4 = new JPanel();
                    colour4.setSize(swatchSize);
                    colour4.setBorder(swatchOutline);
                    colour = map.choosecolour(colourIndex)
                            .choosecolour();
                    colour4.setBackground(colour);
                    swatchPanel.add(colour4);
                } else if (colourIndex == 4) {
                    JPanel colour5 = new JPanel();
                    colour5.setSize(swatchSize);
                    colour5.setBorder(swatchOutline);
                    colour = map.choosecolour(colourIndex)
                            .choosecolour();
                    colour5.setBackground(colour);
                    swatchPanel.add(colour5);
                }
         }
      
      }
        return(swatchPanel);
    }  


    public void InitGUI() {
        
        cmActionListener listener = new cmActionListener();

        Container assingmnet_container = getContentPane();
        assingmnet_container.setLayout(new FlowLayout());
        
        JPanel optionsPanel = new JPanel(new GridLayout(UI_ROW,UI_COL));
        assingmnet_container.add(optionsPanel);

        JLabel dropboxText = new JLabel("Select colour scheme: ");
        optionsPanel.add(dropboxText);

        String[] colourMaps = new String[MAPCOUNT];
        for (int i=0; i<MAPCOUNT; i++) {
            colourMaps[i] = colourmap(i).colourmapName();
        }
      
        assingmnet_mapList = new JComboBox(colourMaps);
      assingmnet_mapList.setEnabled(true);
        assingmnet_mapList.setPreferredSize(new Dimension(UI_WIDTH, UI_HEIGHT));
        assingmnet_mapList.addActionListener(listener);
        optionsPanel.add(assingmnet_mapList);

        JLabel blankLabel1 = new JLabel("");
        optionsPanel.add(blankLabel1);

        assingmnet_previewContainer = new JPanel();
        optionsPanel.add(assingmnet_previewContainer);

        assingmnet_previewPanel = DrawSwatches(assingmnet_mapList.getSelectedIndex());
        assingmnet_previewContainer.add(assingmnet_previewPanel);

        JPanel spacerPanel1 = new JPanel();
        spacerPanel1.setSize(new Dimension(CP_WIDTH, CP_HEIGHT));
        optionsPanel.add(spacerPanel1);

      
      
        JPanel spacerPanel2 = new JPanel();
        spacerPanel2.setSize(new Dimension(CP_WIDTH, CP_HEIGHT));
        optionsPanel.add(spacerPanel2);
      
      assingmnet_CustomButton = new JButton("Custom Colours");
      assingmnet_CustomButton.addActionListener(listener);
      spacerPanel2.add(assingmnet_CustomButton);
      
        JLabel blankLabel2 = new JLabel("");
        optionsPanel.add(blankLabel2);

      
      
        JPanel buttonPanel = new JPanel(new FlowLayout());
        optionsPanel.add(buttonPanel);
            
        assingmnet_saveButton = new JButton("OK");
        assingmnet_saveButton.addActionListener(listener);
        buttonPanel.add(assingmnet_saveButton);

        assingmnet_closeButton = new JButton("Cancel");
        assingmnet_closeButton.addActionListener(listener);
        buttonPanel.add(assingmnet_closeButton);

        pack();
        setResizable(false);
        setLocationRelativeTo(null);

        if (assignemnt_chartmakerFirstTimeOpen) {
            setVisible(false);
            assignemnt_chartmakerFirstTimeOpen = false;
        } else {
            setVisible(true);
        }
    }


    public void integermaps() {
        colourmaker[] colours = new colourmaker[MAPCOUNT];

        if (0 == 0) {
            colourmaker black = new colourmaker("#000000");
            colours[0] = black;
        } else if (0 == 1) {
            colourmaker darkgrey = new colourmaker("#222222");
            colours[0] = darkgrey;
        } else if (0 == 2) {
            colourmaker grey = new colourmaker("#555555");
            colours[0] = grey;
        } else if (0 == 3) {
            colourmaker lightgrey = new colourmaker("#BBBBBB");
            colours[0] = lightgrey;
        } else if (0 == 4) {
            colourmaker white = new colourmaker("#EEEEEE");
            colours[0] = white;
        }
        if (1 == 0) {
            colourmaker black = new colourmaker("#000000");
            colours[1] = black;
        } else if (1 == 1) {
            colourmaker darkgrey = new colourmaker("#222222");
            colours[1] = darkgrey;
        } else if (1 == 2) {
            colourmaker grey = new colourmaker("#555555");
            colours[1] = grey;
        } else if (1 == 3) {
            colourmaker lightgrey = new colourmaker("#BBBBBB");
            colours[1] = lightgrey;
        } else if (1 == 4) {
            colourmaker white = new colourmaker("#EEEEEE");
            colours[1] = white;
        }
        if (2 == 0) {
            colourmaker black = new colourmaker("#000000");
            colours[2] = black;
        } else if (2 == 1) {
            colourmaker darkgrey = new colourmaker("#222222");
            colours[2] = darkgrey;
        } else if (2 == 2) {
            colourmaker grey = new colourmaker("#555555");
            colours[2] = grey;
        } else if (2 == 3) {
            colourmaker lightgrey = new colourmaker("#BBBBBB");
            colours[2] = lightgrey;
        } else if (2 == 4) {
            colourmaker white = new colourmaker("#EEEEEE");
            colours[2] = white;
        }
        if (3 == 0) {
            colourmaker black = new colourmaker("#000000");
            colours[3] = black;
        } else if (3 == 1) {
            colourmaker darkgrey = new colourmaker("#222222");
            colours[3] = darkgrey;
        } else if (3 == 2) {
            colourmaker grey = new colourmaker("#555555");
            colours[3] = grey;
        } else if (3 == 3) {
            colourmaker lightgrey = new colourmaker("#BBBBBB");
            colours[3] = lightgrey;
        } else if (3 == 4) {
            colourmaker white = new colourmaker("#EEEEEE");
            colours[3] = white;
        }
        if (4 == 0) {
            colourmaker black = new colourmaker("#000000");
            colours[4] = black;
        } else if (4 == 1) {
            colourmaker darkgrey = new colourmaker("#222222");
            colours[4] = darkgrey;
        } else if (4 == 2) {
            colourmaker grey = new colourmaker("#555555");
            colours[4] = grey;
        } else if (4 == 3) {
            colourmaker lightgrey = new colourmaker("#BBBBBB");
            colours[4] = lightgrey;
        } else if (4 == 4) {
            colourmaker white = new colourmaker("#EEEEEE");
            colours[4] = white;
        }
        newcolours greyscale = new newcolours(colours, "Greyscale");
        SetMap(GREY, greyscale);


        switch (0) {
            case 0:
                colourmaker colour1 = new colourmaker("#FF0099");
                colours[0] = colour1;
                break;
            case 1:
                colourmaker colour2 = new colourmaker("#F3F315");
                colours[0] = colour2;
                break;
            case 2:
                colourmaker colour3 = new colourmaker("#83F52C");
                colours[0] = colour3;
                break;
            case 3:
                colourmaker colour4 = new colourmaker("#FF6600");
                colours[0] = colour4;
                break;
            case 4:
                colourmaker colour5 = new colourmaker("#6E0DD0");
                colours[0] = colour5;
                break;
        }
        switch (1) {
            case 0:
                colourmaker colour1 = new colourmaker("#FF0099");
                colours[1] = colour1;
                break;
            case 1:
                colourmaker colour2 = new colourmaker("#F3F315");
                colours[1] = colour2;
                break;
            case 2:
                colourmaker colour3 = new colourmaker("#83F52C");
                colours[1] = colour3;
                break;
            case 3:
                colourmaker colour4 = new colourmaker("#FF6600");
                colours[1] = colour4;
                break;
            case 4:
                colourmaker colour5 = new colourmaker("#6E0DD0");
                colours[1] = colour5;
                break;
        }
        switch (2) {
            case 0:
                colourmaker colour1 = new colourmaker("#FF0099");
                colours[2] = colour1;
                break;
            case 1:
                colourmaker colour2 = new colourmaker("#F3F315");
                colours[2] = colour2;
                break;
            case 2:
                colourmaker colour3 = new colourmaker("#83F52C");
                colours[2] = colour3;
                break;
            case 3:
                colourmaker colour4 = new colourmaker("#FF6600");
                colours[2] = colour4;
                break;
            case 4:
                colourmaker colour5 = new colourmaker("#6E0DD0");
                colours[2] = colour5;
                break;
        }
        switch (3) {
            case 0:
                colourmaker colour1 = new colourmaker("#FF0099");
                colours[3] = colour1;
                break;
            case 1:
                colourmaker colour2 = new colourmaker("#F3F315");
                colours[3] = colour2;
                break;
            case 2:
                colourmaker colour3 = new colourmaker("#83F52C");
                colours[3] = colour3;
                break;
            case 3:
                colourmaker colour4 = new colourmaker("#FF6600");
                colours[3] = colour4;
                break;
            case 4:
                colourmaker colour5 = new colourmaker("#6E0DD0");
                colours[3] = colour5;
                break;
        }
        switch (4) {
            case 0:
                colourmaker colour1 = new colourmaker("#FF0099");
                colours[4] = colour1;
                break;
            case 1:
                colourmaker colour2 = new colourmaker("#F3F315");
                colours[4] = colour2;
                break;
            case 2:
                colourmaker colour3 = new colourmaker("#83F52C");
                colours[4] = colour3;
                break;
            case 3:
                colourmaker colour4 = new colourmaker("#FF6600");
                colours[4] = colour4;
                break;
            case 4:
                colourmaker colour5 = new colourmaker("#6E0DD0");
                colours[4] = colour5;
                break;
        }
        newcolours neon = new newcolours(colours, "Neon");
        SetMap(NEON, neon);
        

        for (int i=0; i<MAPCOUNT; i++) {
            if (i == 0) {
                colourmaker colour1 = new colourmaker("#FFFF00");
                colours[i] = colour1;
            } else if (i == 1) {
                colourmaker colour2 = new colourmaker("#FFCC00");
                colours[i] = colour2;
            } else if (i == 2) {
                colourmaker colour3 = new colourmaker("#FF9900");
                colours[i] = colour3;
            } else if (i == 3) {
                colourmaker colour4 = new colourmaker("#FF6600");
                colours[i] = colour4;
            } else if (i == 4) {
                colourmaker colour5 = new colourmaker("#FF3300");
                colours[i] = colour5;
            }
        }
        newcolours warm = new newcolours(colours, "Warm");
        SetMap(WARM, warm);


        if (0 == 0) {
            colourmaker colour1 = new colourmaker("#33FFFF");
            colours[0] = colour1;
        } else if (0 == 1) {
            colourmaker colour2 = new colourmaker("#3399FF");
            colours[0] = colour2;
        } else if (0 == 2) {
            colourmaker colour3 = new colourmaker("#3333FF");
            colours[0] = colour3;
        } else if (0 == 3) {
            colourmaker colour4 = new colourmaker("#9933FF");
            colours[0] = colour4;
        } else if (0 == 4) {
            colourmaker colour5 = new colourmaker("#5C00B8");
            colours[0] = colour5;
        }
        if (1 == 0) {
            colourmaker colour1 = new colourmaker("#33FFFF");
            colours[1] = colour1;
        } else if (1 == 1) {
            colourmaker colour2 = new colourmaker("#3399FF");
            colours[1] = colour2;
        } else if (1 == 2) {
            colourmaker colour3 = new colourmaker("#3333FF");
            colours[1] = colour3;
        } else if (1 == 3) {
            colourmaker colour4 = new colourmaker("#9933FF");
            colours[1] = colour4;
        } else if (1 == 4) {
            colourmaker colour5 = new colourmaker("#5C00B8");
            colours[1] = colour5;
        }
        if (2 == 0) {
            colourmaker colour1 = new colourmaker("#33FFFF");
            colours[2] = colour1;
        } else if (2 == 1) {
            colourmaker colour2 = new colourmaker("#3399FF");
            colours[2] = colour2;
        } else if (2 == 2) {
            colourmaker colour3 = new colourmaker("#3333FF");
            colours[2] = colour3;
        } else if (2 == 3) {
            colourmaker colour4 = new colourmaker("#9933FF");
            colours[2] = colour4;
        } else if (2 == 4) {
            colourmaker colour5 = new colourmaker("#5C00B8");
            colours[2] = colour5;
        }
        if (3 == 0) {
            colourmaker colour1 = new colourmaker("#33FFFF");
            colours[3] = colour1;
        } else if (3 == 1) {
            colourmaker colour2 = new colourmaker("#3399FF");
            colours[3] = colour2;
        } else if (3 == 2) {
            colourmaker colour3 = new colourmaker("#3333FF");
            colours[3] = colour3;
        } else if (3 == 3) {
            colourmaker colour4 = new colourmaker("#9933FF");
            colours[3] = colour4;
        } else if (3 == 4) {
            colourmaker colour5 = new colourmaker("#5C00B8");
            colours[3] = colour5;
        }
        if (4 == 0) {
            colourmaker colour1 = new colourmaker("#33FFFF");
            colours[4] = colour1;
        } else if (4 == 1) {
            colourmaker colour2 = new colourmaker("#3399FF");
            colours[4] = colour2;
        } else if (4 == 2) {
            colourmaker colour3 = new colourmaker("#3333FF");
            colours[4] = colour3;
        } else if (4 == 3) {
            colourmaker colour4 = new colourmaker("#9933FF");
            colours[4] = colour4;
        } else if (4 == 4) {
            colourmaker colour5 = new colourmaker("#5C00B8");
            colours[4] = colour5;
        }
        newcolours cold = new newcolours(colours, "Cold");
        SetMap(COLD, cold);


        if (0 == 0) {
            colourmaker colour1 = new colourmaker("#00E000");
            colours[0] = colour1;
        } else if (0 == 1) {
            colourmaker colour2 = new colourmaker("#64D88B");
            colours[0] = colour2;
        } else if (0 == 2) {
            colourmaker colour3 = new colourmaker("#99CC66");
            colours[0] = colour3;
        } else if (0 == 3) {
            colourmaker colour4 = new colourmaker("#66FF99");
            colours[0] = colour4;
        } else if (0 == 4) {
            colourmaker colour5 = new colourmaker("#CAFF7A");
            colours[0] = colour5;
        }
        if (1 == 0) {
            colourmaker colour1 = new colourmaker("#00E000");
            colours[1] = colour1;
        } else if (1 == 1) {
            colourmaker colour2 = new colourmaker("#64D88B");
            colours[1] = colour2;
        } else if (1 == 2) {
            colourmaker colour3 = new colourmaker("#99CC66");
            colours[1] = colour3;
        } else if (1 == 3) {
            colourmaker colour4 = new colourmaker("#66FF99");
            colours[1] = colour4;
        } else if (1 == 4) {
            colourmaker colour5 = new colourmaker("#CAFF7A");
            colours[1] = colour5;
        }
        if (2 == 0) {
            colourmaker colour1 = new colourmaker("#00E000");
            colours[2] = colour1;
        } else if (2 == 1) {
            colourmaker colour2 = new colourmaker("#64D88B");
            colours[2] = colour2;
        } else if (2 == 2) {
            colourmaker colour3 = new colourmaker("#99CC66");
            colours[2] = colour3;
        } else if (2 == 3) {
            colourmaker colour4 = new colourmaker("#66FF99");
            colours[2] = colour4;
        } else if (2 == 4) {
            colourmaker colour5 = new colourmaker("#CAFF7A");
            colours[2] = colour5;
        }
        if (3 == 0) {
            colourmaker colour1 = new colourmaker("#00E000");
            colours[3] = colour1;
        } else if (3 == 1) {
            colourmaker colour2 = new colourmaker("#64D88B");
            colours[3] = colour2;
        } else if (3 == 2) {
            colourmaker colour3 = new colourmaker("#99CC66");
            colours[3] = colour3;
        } else if (3 == 3) {
            colourmaker colour4 = new colourmaker("#66FF99");
            colours[3] = colour4;
        } else if (3 == 4) {
            colourmaker colour5 = new colourmaker("#CAFF7A");
            colours[3] = colour5;
        }
        if (4 == 0) {
            colourmaker colour1 = new colourmaker("#00E000");
            colours[4] = colour1;
        } else if (4 == 1) {
            colourmaker colour2 = new colourmaker("#64D88B");
            colours[4] = colour2;
        } else if (4 == 2) {
            colourmaker colour3 = new colourmaker("#99CC66");
            colours[4] = colour3;
        } else if (4 == 3) {
            colourmaker colour4 = new colourmaker("#66FF99");
            colours[4] = colour4;
        } else if (4 == 4) {
            colourmaker colour5 = new colourmaker("#CAFF7A");
            colours[4] = colour5;
        }
        newcolours meadow = new newcolours(colours, "Meadow");
        SetMap(MEADOW, meadow);
      

        SetActiveMap(GREY);
        SetRenderers();
    }


    public void SaveAndClose() {
        
      if (assingmnet_mapList.isEnabled()) {
         SetActiveMap(assingmnet_mapList.getSelectedIndex());
      } else {
         SetActiveMap(CUSTOM);
      }
      
        GroupJVTApplication.dataVisualizer.RedrawChartColour();
        assingmnet_mapList.setEnabled(true);
      setVisible(false);
    }
   

    public boolean SetActiveMap(int mapIndex) {
        assingmnet_activeMap = mapIndex;
        SetRenderers();
        return(true);
    }
   

    public boolean SetMap(int mapIndex, newcolours map) {
        assingmnet_colourMaps[mapIndex] = map;
        SetRenderers();
        return(true);
    }
   

    public boolean SetRenderers() {
        menubar123Renderer = new barcoloured(GetActiveMap());
      assingmnet_lineRenderer = new linecoloured(GetActiveMap());
      assingmnet_areaRenderer = new areacoloured(GetActiveMap());
        return(true);
    } 


    private class cmActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            /* When combo box changed, redraw preview panel. */
            if (e.getSource()==assingmnet_mapList) {
                
                assingmnet_previewContainer.removeAll();
                assingmnet_previewPanel = DrawSwatches(assingmnet_mapList.getSelectedIndex());
                assingmnet_previewContainer.add(assingmnet_previewPanel);
                assingmnet_previewPanel.repaint();
                assingmnet_previewPanel.revalidate();
            }
            
            if (e.getSource()==assingmnet_closeButton) {
                assingmnet_mapList.setEnabled(true);
            CloseFrame();
            }
        
            if (e.getSource()==assingmnet_saveButton) {
                GroupJVTApplication.dataVisualizer.SelectChartTab(); //line added
                SaveAndClose();
            }
         
         if (e.getSource() == assingmnet_CustomButton) {
         
            findcolour select = new findcolour();
            assingmnet_custom = select.InitMap();
            if (assingmnet_custom == null) {
               
            } else {
               assingmnet_mapList.setEnabled(false);
               assingmnet_previewContainer.removeAll();
               assingmnet_previewPanel = DrawSwatches(CUSTOM);
               assingmnet_previewContainer.add(assingmnet_previewPanel);
               assingmnet_previewPanel.repaint();
               assingmnet_previewPanel.revalidate();
            }
         
         }
        }
    }
               

    private final int MAPCOUNT = 5;


    private newcolours[] assingmnet_colourMaps = new newcolours[MAPCOUNT];


    private int assingmnet_activeMap;
   

   private final int CUSTOM = MAPCOUNT + 1;
   

   private newcolours assingmnet_custom;


    private barcoloured menubar123Renderer;

   

   private linecoloured assingmnet_lineRenderer;
   

   private ringcoloured assingmnet_ringRenderer;




   private areacoloured assingmnet_areaRenderer;



    private JComboBox assingmnet_mapList;


    private JPanel assingmnet_previewPanel;


    private JPanel assingmnet_previewContainer;


    private JButton assingmnet_saveButton;


    private JButton assingmnet_closeButton;
   

   private JButton assingmnet_CustomButton;


    private Boolean assignemnt_chartmakerFirstTimeOpen = true;
    private final int GREY = 0;
   private final int NEON = 1;
   private final int WARM = 2;
   private final int COLD = 3;
   private final int MEADOW = 4;
    private int Cassingmnet_WIDTH = 350;
    private int Cassingmnet_HEIGHT = 250;
    private int UI_WIDTH = 150;
    private int UI_HEIGHT = 10;
    private int CP_WIDTH = 10;
    private int CP_HEIGHT = 400;
    private int S_WIDTH = 20;
    private int S_HEIGHT = 20;
    private int UI_ROW = 4;
    private int UI_COL = 2;
   
   

   public static void main(String[] args) {
      choosecolour test = new choosecolour();
      int grey = 0;
      int neon = 1;
      int warm = 2;
      int cold = 3;
      int meadow = 4;
      
      test.SetActiveMap(grey);
      System.out.println("ColourManager:: GetActiveMap()");
      if (test.GetActiveMap() == test.colourmap(grey)) {
         System.out.println("ColourManager:: GetActiveMap() - Test Passed");
      } else {
         System.out.println("ColourManager:: GetActiveMap() - Test Failed");
      }
      
      test.setVisible(true);
   }
   
}

Это не полный цветовой код, к нему подключено еще несколько классов Java, вы можете увидеть все классы здесь:

https://github.com/isauravmanitripathi/covid-19-data-visualization

Когда вы нажмете на ссылку выше, вы также найдете код для остальных доступных диаграмм. Я не буду добавлять их в свою среднюю статью, потому что это сделает ее более длинной, чем она есть.

Теперь поговорим о сохранении графика. Приведенный ниже код поможет нам сохранить графики, которые мы визуализировали.

import javax.swing.JFrame;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import java.awt.Graphics;
import javax.swing.border.Border;
import javax.swing.BorderFactory;


public class graphsaver {
      

   public graphsaver(chartgenerator chart, int defaultchartwidth,
                 int defaultchartheight) {
      assignment_chart = chart;
      assignment_Frame = new JFrame("Save Chart");
      assignment_Frame.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      assignment_Frame.setResizable(false);
      assignment_Frame.setLocationRelativeTo(null);
        assignment_Frame.setLayout(new FlowLayout());
      
      assignment_panel = new JPanel(new GridLayout(ROWS,COLUMNS));
      
      Border border = BorderFactory
                .createTitledBorder("Save Settings");
        assignment_panel.setBorder(border);
      
        assignment_Frame.add(assignment_panel);
      
      JLabel label = new JLabel("File Title");
      assignment_panel.add(label);
      assignment_fileTitle = new JTextField("Untitled");
        assignment_panel.add(assignment_fileTitle);
      
      label = new JLabel("Chart Width");
      assignment_panel.add(label);
      assignment_chartWidth = new JTextField(Integer.toString(
         defaultchartwidth));
        assignment_panel.add(assignment_chartWidth);
      
      label = new JLabel("Chart Height      ");
      assignment_panel.add(label);
      assignment_chartHeight = new JTextField(Integer.toString(
         defaultchartheight));
        assignment_panel.add(assignment_chartHeight);
      
      JLabel blankLabel1 = new JLabel("");
        assignment_panel.add(blankLabel1);
      JLabel blankLabel2 = new JLabel("");
      assignment_panel.add(blankLabel2);
      JLabel blankLabel3 = new JLabel("");
      assignment_panel.add(blankLabel3);
      
      assignment_Save = new JButton("Save");
      assignment_panel.add(assignment_Save);
      
      SaveEventHandler eventHandeler = new SaveEventHandler();
        assignment_Save.addActionListener(eventHandeler);
      
      assignment_Frame.setVisible(true);
      
   }
   

   public JPanel getJPanel() {
      return assignment_ChartPanel;
   }
   

   public boolean setJPanel(JPanel panel) {
      assignment_ChartPanel = panel;
      return true;
   }
   
   

    private class SaveEventHandler implements ActionListener {
      
        @Override
        public void actionPerformed(ActionEvent event) {
            if (event.getSource()== assignment_Save){
                Save();                  
         }
      }  

   public boolean Save() {
      String filename = assignment_fileTitle.getText();
      
      //Stop saving if no filename is given.
      if (filename.isEmpty()) {
         JOptionPane.showMessageDialog(null, 
            "No filename");
         return false;
      }
      
      int width;
      int height;
      String str_width = assignment_chartWidth.getText().toString();
      String str_height = assignment_chartHeight.getText().toString();
      try {
         width = Integer.valueOf(str_width);
         height = Integer.valueOf(str_height);
      } catch (Exception e) {
         JOptionPane.showMessageDialog(null, 
            "Width and Height entered not numbers");
         return false;
      }
             
      try {
         
         BufferedImage bi = new BufferedImage(width, 
                  height, BufferedImage.TYPE_INT_ARGB);       
         Graphics g = bi.createGraphics();
         assignment_ChartPanel.paint(g);  //this == JComponent
         g.dispose();
         
         ImageIO.write(bi,"png",new File(filename + ".png"));
      } catch (Exception e) {
         JOptionPane.showMessageDialog(null, 
            "Save unsuccessful");
         return false;
      }
   
      JOptionPane.showMessageDialog(null, "Save successful");
      assignment_Frame.setVisible(false);
      return true;
   }
         
        
   
   }

   final private int DEFAULT_WIDTH = 200;

   final private int DEFAULT_HEIGHT = 200;

   final private int ROWS = 5;

   final private int COLUMNS = 2;

   private JPanel assignment_ChartPanel;

   private JPanel assignment_panel;

   private JButton assignment_Save;

   private chartgenerator assignment_chart;

   private JFrame assignment_Frame;

   private JTextField assignment_fileTitle;

   private JTextField assignment_chartWidth;

   private JTextField assignment_chartHeight;
   

   public static void main(String args[]){
      chartdata testdataset = new chartdata();
      File inputfile = new File("test.csv");
      testdataset.BuildDataSet(inputfile);
      chartgenerator testChart = new chartgenerator(testdataset);
      int width = 400;
      int height = 400;
      System.out.println("GraphSaver:: GraphSaver()");
      graphsaver testSave = new graphsaver(testChart, width, height);
      System.out.println("GraphSaver:: GraphSaver() - Test Passed");
   }
}

После выполнения вы сможете сохранить диаграмму в папке программы, но вы можете изменить местоположение на любое другое, где вы хотите, папка с кодом является местоположением по умолчанию.

Так что все на сегодня. Пожалуйста, проверьте мою страницу github, где вы найдете весь код.

https://github.com/isauravmanitripathi/covid-19-data-visualization

А также свяжитесь со мной на linkedin:

https://www.linkedin.com/in/saurav-mani-tripathi-30859b20b/