На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Гистограмма на Java


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

Что вообще такое обычная гистограмма (Clustered Column)? По сути дела это графическое представление определенных данных. С помощью такой формы можно наглядно показать разницу, динамику и изменение данных. Например, у нас есть данные по посещаемости некоторых сайтов в определенные месяцы года. Можно их наглядно представить в виде гистограммы:



Теперь попробуем то же самое реализовать на Java. Для рисования нам потребуется создать класс DrawingComponent, который будет создан на основе класса (расширять его возможности) JPanel. Листинг:

class DrawingComponent extends JPanel {
 @Override
    protected void paintComponent(Graphics gh) {       
     Graphics2D drp = (Graphics2D)gh;   
     
     //горизонтальные линии и обозначения
      for (int i=2; i<9; i++) {
     drp.drawLine(50, 50+44*i, 400, 50+44*i);
  int vs = 80 - i*10;
     drp.drawString(vs+"", 30, 50+44*i);
     }
      
      drp.drawString("upread.ru", 100, 40);
      drp.drawString("google.ru", 100, 60);
      drp.drawString("yandex.ru", 100, 80);
      
      drp.drawString("Январь", 60, 420);
      drp.drawString("Февраль", 160, 420);
      drp.drawString("Март", 260, 420);
      drp.drawString("Апрель", 360, 420);
      
      drp.setColor(Color.BLUE);
      drp.fillRect(80, 30, 10, 10);
      drp.setColor(Color.RED);
      drp.fillRect(80, 50, 10, 10);
      drp.setColor(Color.GREEN);
      drp.fillRect(80, 70, 10, 10);
      
   for (int i=0; i<4; i++) {
     //строим саму гистограмму 
       //извлекаем цвет для каждого графика
      Color color = RED; 
       for (int j=0;j<3;j++) { 
           try {
           Field field = Class.forName("java.awt.Color").getField(GrGis.col[j].toLowerCase());
      color = (Color)field.get(null);
           } catch (Exception e) {}
           drp.setColor(color); 
    //переводим полученные данные в реальные координаты  
     int realY = (int) (400-44*GrGis.y[j][i]/10)+3;   
     drp.fillRect(50+20*j+100*i, realY, 20,(int) (GrGis.y[j][i]*4.4));
       }
   }      
    }
}
Сложного тут нет ничего совершенно: мы просто рисуем линии и прямоугольники и добавляем текст по заданным координатам. А вот сами координаты берутся из основного класса – здесь двумерный массив y определяется в основном методе для наглядности:

public class GrGis extends JFrame{
    public  static double y[][] = new double[3][4];
    public  static String col[] = {"BLUE", "RED", "GREEN"};//массив цветов 
    
    public GrGis () {  
      super("Обычная гистограмма");
        JPanel jcp = new JPanel(new BorderLayout());
        setContentPane(jcp);
        jcp.add(new DrawingComponent(), BorderLayout.CENTER);     
        jcp.setBackground(Color.gray);
        setSize(500, 500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);   
    }   
    
    public static void main(String[] args) {   
           y[0][0]=5;   
           y[0][1]=10;
           y[0][2]=12;
           y[0][3]=8;
   
           y[1][0]=24;
           y[1][1]=44;
           y[1][2]=18;
           y[1][3]=28;
                  
           y[2][0]=20;     
           y[2][1]=20;
           y[2][2]=30;     
           y[2][3]=50;
        
         GrGis gr = new GrGis ();
         gr.setVisible(true);
    }  
}
Тут тоже ничего особо сложного нет. Создаем окно, пара массивов – со значениями и цветами, добавляем панель на окно. В итоге мы имеем вот это:



Вот так с помощью awt и swing можно реализовать обычную гистограмму, создать класс для работы с деловой графикой на языке Java. Если у вас есть какие-либо вопросы, или требуется написать программу на Java, то вы в любое время можете обратиться ко мне.




тегизаметки, java, графики, гистограмма





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Как создать компьютерную программу
Окно на сайт, всплывающее через некоторое время


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.