Быстрая графическая библиотека - PullRequest
6 голосов
/ 26 июля 2010

Я использовал Incanter для своих потребностей в графике, что было достаточно, но медленно для моих предыдущих потребностей.

Теперь мне нужно встроить график в JPanel. Пользователи должны будут взаимодействовать с графиком (например, нажимая на определенные точки, которые программа должна будет получать и обрабатывать), перетаскивая и щелкая. Увеличение масштаба изображения также является обязательным.

Я слышал о JFreeChart в других обсуждениях SO, но я вижу, что Incanter использует его в качестве графического движка, и тогда он казался несколько медленным. Это действительно быстро, но, возможно, Incanter делает вещи, которые замедляют его?

Я рисую до 2 миллионов точек (на самом деле, простые xy-графики), хотя в целом график будет меньше. Используя Matlab, это строится за несколько секунд, но Incanter может зависать в течение нескольких минут.

Так стоит ли идти в JFreeChart? Или что-то еще, учитывая мои потребности?

(Кроме того, он должен быть бесплатным, как и для исследований.)

Ответы [ 2 ]

5 голосов
/ 27 июля 2010

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

Я вижу несколько разумных вариантов:

  • Напишите свою собственную функцию «плоттера», которая оптимизирована для рисования большого количества точек. Вам придется протестировать его, но я думаю, что вы можете получить желаемую производительность, записав точки непосредственно в BufferedImage, используя setRGB в тесном цикле. Если это все еще не достаточно быстро, вы можете записать точки непосредственно в байтовый массив и создать MemoryImageSource.

  • Исключите точки, чтобы вы только рисовали, например. Максимум 10000 баллов. Это может быть вполне приемлемо, если вы действительно заботитесь только об общей форме графика рассеяния, а не об отдельных точках.

  • Предварительно отрендерить все точки, например. затем большое BufferedImage позволяет пользователям увеличивать и уменьшать масштаб / взаимодействовать с этим статическим изображением. Вы могли бы "взломать" JFreeChart, чтобы сделать это.

  • Если OpenGL является опцией (потребуется собственный код + получение крутой кривой обучения!), То отбросьте все точки в большом массиве вершин и попросите видеокарту сделать все это за вас. Обрабатывает 2 миллиона точек в режиме реального времени без каких-либо затруднений.

1 голос
/ 08 июня 2011

MathGL - быстрая и бесплатная (GPL) библиотека для построения графиков. Но я никогда не тестирую его интерфейс Java (на основе Swig), так как я не знаком с Java :(. Поэтому, если кто-то может помочь с тестированием, я буду благодарен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...