Генерация и сохранение в бэкграунде графиков matplotlib
15 000 руб. за проект
Генерация и сохранение в бэкграунде графиков matplotlib
К заказу приложен тест (по ссылке ниже). Тест имитирует исходный проект. Отладить функцию генерации и сохранения графиков надо прямо в тесте.
В исходном проекте запускается экземпляр класса Main, а Main запускает несколько экземпляров класса Simulation. Экземпляры Simulation запускаются как отдельные процессы с помощью модуля threading. Экземпляры Simulation не обмениваются между собой данными, они независимы.
Экземпляры Simulation должны сохранять графики в виде растровых (PNG) и векторных (не выбрал пока формата) картинок. Отрисовка и сохранение картинок должно быть в бэкграунде. Для создания графиков выбран модуль matplotlib.
matplotlib отказывался работать в Simulation, с ошибкой - не может запускаться не из главного процесса. Видимо из-за того что Simulation запущен через threading. Для решения этой проблемы использовался код отсюда
Multiprocess — Matplotlib 3.5.3 documentation
Исходный код из этой ссылки немного упрощен, но ошибку (невозможно работать не в главном процессе) удалось решить. Но осталось много проблем.
Задачи которые нужно решить:
1. сохранение картинки в файл работает только когда включена отрисовка на экран пользователя (plt.show). В документации к matplotlib рекомендуют отрисовку в бэкграунд через matplotlib.use('Agg'), но при этом почему то закрывается pipe в multiprocessing. Применение matplotlib.use('Agg') я откатил и эта проблема не решена. Окно matplotlib не должно появлятся на экране пользователя.
2. В Simulation даётся команда на сохранение 8ми графиков. Но сохранятеся только 7 картинок. Видимо последняя картинка не сохраняется.
3. Сейчас графики накладываются друг на друга. Вторая, третья и т.д. сохраненная картинка показывает наложенными 1ый + 2ой график, 1ый + 2ой + 3ий графики и т.д. Нужно чтобы чтобы графики не накладывались.
4. Генерация и сохранение первого графика требует около 3 секунд, а каждого последующего - 1 секунду. Нужно уменьшить время до 0.1 сек. (вызов графика - сторока 92 "self.parameters['plotter'].send(data)")
5. Нужно переписать класс Plotter и добавить обработку входных числовых данных разными способами. А именно, чтобы генерировались графики с разным дизайном. Для этого можно в передаваемые данные добавить ключ "type" с возможными значениями ['type_1', 'type_2', 'type_3'] и далее в Plotter должно быть ветвление для генерации графиков разного дизайна.
6. В дизайн графиков добавить возможность задавать: заголовок, названия осей, диапазон значения осей, равный масштаб осей (данные отображают координаты облака точек и нужно чтобы не искажалась форма облака), легенда, форма точек, цвет точек, разрешения сохраняемой картинки, размер сохраняемой картинки, тип файла сохраняемой картинки - растровый (png).
Тестовую функцию и исходные данные, в которой нужно решить указанные проблемы, можно скачайть по ссылке https://1drv.ms/u/s!AgsliTwx9ZLRhNFF7z-TTJtETJiGhg...
Скриншот тестовой функции приложени к заказу.
Требования: Windows 10, Python 3.9
Срок - 1 неделя
К заказу приложен тест (по ссылке ниже). Тест имитирует исходный проект. Отладить функцию генерации и сохранения графиков надо прямо в тесте.
В исходном проекте запускается экземпляр класса Main, а Main запускает несколько экземпляров класса Simulation. Экземпляры Simulation запускаются как отдельные процессы с помощью модуля threading. Экземпляры Simulation не обмениваются между собой данными, они независимы.
Экземпляры Simulation должны сохранять графики в виде растровых (PNG) и векторных (не выбрал пока формата) картинок. Отрисовка и сохранение картинок должно быть в бэкграунде. Для создания графиков выбран модуль matplotlib.
matplotlib отказывался работать в Simulation, с ошибкой - не может запускаться не из главного процесса. Видимо из-за того что Simulation запущен через threading. Для решения этой проблемы использовался код отсюда
Multiprocess — Matplotlib 3.5.3 documentation
Исходный код из этой ссылки немного упрощен, но ошибку (невозможно работать не в главном процессе) удалось решить. Но осталось много проблем.
Задачи которые нужно решить:
1. сохранение картинки в файл работает только когда включена отрисовка на экран пользователя (plt.show). В документации к matplotlib рекомендуют отрисовку в бэкграунд через matplotlib.use('Agg'), но при этом почему то закрывается pipe в multiprocessing. Применение matplotlib.use('Agg') я откатил и эта проблема не решена. Окно matplotlib не должно появлятся на экране пользователя.
2. В Simulation даётся команда на сохранение 8ми графиков. Но сохранятеся только 7 картинок. Видимо последняя картинка не сохраняется.
3. Сейчас графики накладываются друг на друга. Вторая, третья и т.д. сохраненная картинка показывает наложенными 1ый + 2ой график, 1ый + 2ой + 3ий графики и т.д. Нужно чтобы чтобы графики не накладывались.
4. Генерация и сохранение первого графика требует около 3 секунд, а каждого последующего - 1 секунду. Нужно уменьшить время до 0.1 сек. (вызов графика - сторока 92 "self.parameters['plotter'].send(data)")
5. Нужно переписать класс Plotter и добавить обработку входных числовых данных разными способами. А именно, чтобы генерировались графики с разным дизайном. Для этого можно в передаваемые данные добавить ключ "type" с возможными значениями ['type_1', 'type_2', 'type_3'] и далее в Plotter должно быть ветвление для генерации графиков разного дизайна.
6. В дизайн графиков добавить возможность задавать: заголовок, названия осей, диапазон значения осей, равный масштаб осей (данные отображают координаты облака точек и нужно чтобы не искажалась форма облака), легенда, форма точек, цвет точек, разрешения сохраняемой картинки, размер сохраняемой картинки, тип файла сохраняемой картинки - растровый (png).
Тестовую функцию и исходные данные, в которой нужно решить указанные проблемы, можно скачайть по ссылке https://1drv.ms/u/s!AgsliTwx9ZLRhNFF7z-TTJtETJiGhg...
Скриншот тестовой функции приложени к заказу.
Требования: Windows 10, Python 3.9
Срок - 1 неделя
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.
Рекомендую