Skip to content
Простая библиотека C++ для рисования графиков
C++
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
code_blocks/example_opengl
img
include
lib
.gitmodules
LICENSE
README.md

README.md

easy_plot_cpp

Простая библиотека C++ для рисования графиков и тепловых карт

Описание

Данная header-only библиотека позволяет рисовать простые графики или тепловые карты сразу из программы.

Пример:

example_0 example example_heat_mapexample_monochrome_image

Отличия от других библиотек и особенности:

  • Для работы нужен только FreeGLUT, не нужно устанавливать громоздкий OpenCV или быть зависимым от matplotlib
  • Библиотека содержит мало кода, помещается в один header файл, ее можно легко доработать под свои нужды
  • Рисование графиков происходит в отдельном потоке, можно перерисовывать графики
  • Можно рисовать тепловые карты
  • Можно использовать курсор мыши для получения данных графика или тепловой карты

Как установить?

  • Инструкция для Code::Blocks и компилятора mingw

Подключить библиотеку freeglut или freeglut_static (во втором случае также установите макрос FREEGLUT_STATIC), а также opengl32, winmm, gdi32. Подключить в проекте заголовочный файл include/easy_plot.hpp Указать С++11 или выше

Для проверки можно запустить код:

#include "easy_plot.hpp"

int main(int argc, char* argv[]) {
    easy_plot::init(&argc, argv);
	
    std::vector<double> x = {0,1,0,1,2,0,1};
    easy_plot::plot("X", x);

    // ставим красный цвет линии
    std::vector<double> y = {0,2,3,4,2,0,1};
    easy_plot::plot("Y", y, easy_plot::LineSpec(1,0,0));

	
    std::vector<double> x2 = {0,2,6,7,8,10,12};
    easy_plot::plot("XY", x2, y, easy_plot::LineSpec(1,1,0));

    easy_plot::WindowSpec wstyle; // тут можно настроить стиль графика (цвет фона и пр.)
    // выводим три графика в одном
    easy_plot::plot<double>("Y1Y2Y3", wstyle, 3, x, easy_plot::LineSpec(1,0,0), x2, easy_plot::LineSpec(1,0,1), y,     easy_plot::LineSpec(0,1,0));

    while(true) {
        std::this_thread::yield();
    }
    return 0;
}

Чтобы нарисовать тепловую карту:

#include "easy_plot.hpp"

int main(int argc, char* argv[]) {
    easy_plot::init(&argc, argv);
	
    easy_plot::WindowSpec image_wstyle;
    image_wstyle.is_grid = true;
    image_wstyle.height = 320;
    image_wstyle.width = 320;
    float image_data[32][32] = {};
    size_t image_ind = 0;
    for(size_t x = 0 ; x < 32; ++x) {
        for(size_t y = 0; y < 32; ++y, ++image_ind) {
            image_data[x][y] = 1024 - std::sqrt((x - 18) * (x - 18) + (y - 18) * (y - 18));
        }
    }

    image_wstyle.is_color_heatmap = true;
    easy_plot::draw_heatmap("image_heatmap", image_wstyle, &image_data[0][0], 32, 32);

    while(true) {
        std::this_thread::yield();
    }
    return 0;
}

Программа нарисует такую тепловую карту:

example_heat_map

Как пользоваться

  • Для рисования графика вызовите подходящую для ваших нужд easy_plot::plot функцию
  • Функция plot может принимать такие параметры, как имя окна, стиль окна (различные настройки цвета и пр., см. WindowSpec), данные графиков и стиль линий.
  • Функция draw_heatmap может принимать такие параметры, как имя окна, стиль окна (различные настройки цвета и пр., см. WindowSpec), данные массива тепловой карты типа float и размер тепловой карты
  • Если графиков несколько, изначально они будут расположены по всему экрану равномерно, как на картинке example_1 example1
  • Если навести курсор мыши на график, можно узнать номер линии и данные по осям X и Y example_2 example2

Полезные ссылки

You can’t perform that action at this time.