Версия для печати темы
Форум на CrossPlatform.RU _ Qt Система рисования. Печать _ Графики, графики ...
Автор: zss 9.6.2009, 12:33
Подскажите находил ли кто библиотеки для отрисовки графиков кроме Qwt и KDChart.
З.Ы. Хотелось бы в исходниках...
Автор: igor_bogomolov 9.6.2009, 12:47
http://mathgl.sourceforge.net/
Правда я так и не смог собрать ее под MinGW & Windows (((
Автор: AD 9.6.2009, 12:57
Поищите по темам, тут была реализация для построения графиков! Если приведенный вариант устроит, то его и возьмите!
Автор: ViGOur 9.6.2009, 13:03
zss, ты лучше скажи чем именно тебя не устраивает Qwt и какой функционал тебе нужен...
Может проще будет все сделать руками, вон у AD уже в этом опыт есть, сделал все намного лучше и как я понял выполняется быстрей чем в том же Qwt.
AD, напомни здесь URL той темки, а то я что-то вспомнить не могу.
Автор: zss 9.6.2009, 13:12
Цитата(AD @ 9.6.2009, 13:57)
zss, ты лучше скажи чем именно тебя не устраивает Qwt и какой функционал тебе нужен...
нужен водопад (зависимость значения от времени и азимута)
Автор: AD 9.6.2009, 13:53
Цитата(ViGOur @ 9.6.2009, 14:03)
Может проще будет все сделать руками, вон у
AD уже в этом опыт есть, сделал все намного лучше и как я понял выполняется быстрей чем в том же Qwt.
AD, напомни здесь URL той темки, а то я что-то вспомнить не могу.
Ну ты меня так не смущай!
А вообще вот ссылку нашел:
http://www.forum.crossplatform.ru/index.php?showtopic=2307&hl=%E3%F0%E0%F4%E8%EA%E8
Думаю подойдет. Если что-то еще необходимо, то думаю, несложно модифицировать данный код!
Автор: Litkevich Yuriy 9.6.2009, 15:04
Цитата(zss @ 9.6.2009, 17:12)
нужен водопад (зависимость значения от времени и азимута)
самому делать.
Автор: AD 9.6.2009, 15:17
Цитата(Litkevich Yuriy @ 9.6.2009, 16:04)
самому делать.
А разве вариант, который у меня реализован, нельзя модифицировать под указанный случай?
Автор: zss 9.6.2009, 15:23
Цитата(Litkevich Yuriy @ 9.6.2009, 16:04)
А разве вариант, который у меня реализован, нельзя модифицировать под указанный случай?
я просто не совсем понял какой вариант твой - там много ссылок...
Автор: Litkevich Yuriy 9.6.2009, 15:24
Цитата(AD @ 9.6.2009, 19:17)
модифицировать
всё равно прийдётся, готового нет.
Автор: AD 9.6.2009, 15:27
Вариант, который спрятан в тегах. Без ссылок!
Автор: Litkevich Yuriy 9.6.2009, 15:41
ну ты бы дал ссылку сразу на сообщение конкретное.
Автор: igor_bogomolov 9.6.2009, 15:50
А у меня такой вопрос к сообществу - никто не пробовал MathGL заюзать под винду с mingw? Я в свое время более двух дней с ней возился, так и не собрал. А с готовыми dll которые предлогаются, проекты не компилируются?
Автор: Litkevich Yuriy 9.6.2009, 17:24
я не пробовал
Автор: SABROG 9.6.2009, 17:45
Тоже не пробовал и врятли буду. Не люблю я кучу зависимостей еще компилить. Всегда какая-то одна будет либо старой либо с косяками, либо вообще не собираться на этом компиляторе:
Цитата
# I use VisualStudio, CBuilder or some other compiler. How can I link MathGL library?
There are 2 ways. First is use the precompiled binary (*.dll). In this case you should make libraries for yours compiler from *.dll and *.def files. The corresponding command may look like lib.exe /def:libmgl.def. But such way provide you only pure C functions, not C++ classes. The matter is that there is no standard for C++ functions naming in object files. The standard was accepted only for C functions.
The second way is to compile the library from sources. MathGL library have some external dependencies (PNG, GSL, JPEG, TIFF, FLTK, GLUT, HDF5), but most of them is optional. Some libraries can be found here. But also you may exclude from the project the corresponding files to disable usage of JPEG, TIFF, FLTK, GLUT, HDF5 libraries. Also you may define NO_GSL at compilation stage for disabling GSL support. At this some special functions in formulas, Fourier transform and nonlinear fitting will be disabled also.
For excluding PNG support just comment the body of functions mgl_pnga_save(),mgl_png_save() in mgl_export.cpp. After it MathGL library will not depend on any external libraries. But in this case you should redirect the output to some window (as bitmap drawing from mglGraphZB|PS::GetBits() or mglGraphZB|PS::GetRGBA()) and save this bitmap to a file by yourself.
Finally! Please do not ask me Windows-specific questions. I do not use Windows. I know nothing about Visual Basic, Visual C++, CBuiled or .NET. Please find the appropriate Usenet discussion group and ask your question there.
Автор: igor_bogomolov 9.6.2009, 20:38
Цитата(SABROG @ 9.6.2009, 18:45)
Тоже не пробовал и врятли буду. Не люблю я кучу зависимостей еще компилить. Всегда какая-то одна будет либо старой либо с косяками, либо вообще не собираться на этом компиляторе:
Мне на данный момент эта библиотека тоже не нужна. Просто хотел посмотреть, никогда не знаешь, что может пригодиться. Просто для ознакомления.
Зависимостей действительно много, только большая часть из них, при использовании с Qt, не нужна, и их можно отключить (python, groovy, графические форматы, FLTK и т.д.). Единственное что обязательно пребует это libpng, который в свою очередь тащит zlib, и glut, который входит в комплект с mingw. Зависимости я собирал без проблем, а вот сам MathGL, так и не собрал. При конфигурации в MSYS, появляются ошибки, которие я правильно подправить не смог.
Для винды существуют уже http://downloads.sourceforge.net/mathgl/mathgl-1.8.1-mingw.i686.zip со всеми зависимостями, и собранные на mingw. Их я к проекту прикрутить так же не смог. Проекты не хотят с ними компилироваться.
Можно, конечно, поинтересоваться у автора этой библиотеки, по поводу сборки под винду, тем более автор русский (Alexey Balakin),
но его коментарий меня отпугнул.
Цитата
Please do not ask me Windows-specific questions. I do not use Windows.
Автор: Kagami 9.6.2009, 20:52
Я подумываю написать библиотеку построения графиков с использованием QGraphicView. Но пока руки не доходят
Автор: igor_bogomolov 9.6.2009, 21:10
Цитата(Kagami @ 9.6.2009, 21:52)
Я подумываю написать библиотеку построения графиков с использованием QGraphicView. Но пока руки не доходят
Как у самого необходимость в ней появится, так и напишешь
У многих, я так думаю, есть своя библиотека для построения графиков, зоточенная под свои нужды.
Я для себя, пример из Бланшет переделывал. Когда только начинал осваивать Qt, мне оказалось проще написать все самому, чем разобраться с qwt (у многих почему то обратный процесс). До сих пор предпочитаю графики самостоятельно рисовать. Они у меня правда двухмерные, поэтому ничего сложного нет. Начальник на opengl все делает.
Автор: Kagami 9.6.2009, 21:50
Своя библиотека у меня уже есть Вот хочу ее на QGraphicView переделать.
Автор: zss 9.6.2009, 22:08
ну хорошо - раз такая пьянка, то подскажите идеологию правильного графика для моих нужд (как хранит данные, как масштабировать...)
З.Ы. Или может для переделки подойти QwtPlotSpectrogram ?
Автор: Litkevich Yuriy 9.6.2009, 23:33
zss, ты расскажи как примерно график-то выглядеть должен?
Автор: zss 10.6.2009, 6:48
Цитата(Litkevich Yuriy @ 10.6.2009, 0:33)
zss, ты расскажи как примерно график-то выглядеть должен?
ну примерно так. тоесть сверху пиковое значение, а снизу течет водопад (зависимость значения от времени и азимута)
Автор: AD 10.6.2009, 10:35
Цитата(zss @ 9.6.2009, 23:08)
ну хорошо - раз такая пьянка, то подскажите идеологию правильного графика для моих нужд (как хранит данные, как масштабировать...)
З.Ы. Или может для переделки подойти QwtPlotSpectrogram ?
Вы посмотрели по указанной ссылке? Там ведь впринципе все просто. Сделан класс
PlotSettings, который отвечает за управление графиком (масштабирование, перемещение и прочее), ну а в главном классе есть несколько функций, которые реализуют отрисовку:
drawGrid - рисование сетки,
draw<anybody> - рисование чего-то еще.
QVector<<coordsinates>> - вектор, хранящий экранные координаты, в том виде, который Вам удобен.
В принципе, все указанное можно еще более структуризировать и улучшить, но смысл останется тот же! Посмотрите, попробуйте разобраться, скомпилируйте, в конце концов. Пример проверен. Если будут вопросы, задавайте!
Вот скриншот, показывающий вид графика (неужели сильно отличается??? Я не заметил сильных отличий!)
На графике зависимость рассчетного крена от времени.
[attachment=655:graphic.JPG]
Автор: Litkevich Yuriy 10.6.2009, 11:20
Цитата(zss @ 10.6.2009, 10:48)
тоесть сверху пиковое значение, а снизу течет водопад
сверху, конечно просто, обячный двумерный график.
А вот нижнюю часть самому рисовать прийдётся. Никогда невидел, чтоб такие графики кто-то за дарма предлагал.
Автор: AD 10.6.2009, 11:35
Ну вот эта штука похожа на то, что нужно сделать?
[attachment=656:graphic.JPG]
Если да, то тогда смогу подсказать!
Введен еще один вектор, в котором имеются свои координаты, но они подчиняются тем же правилам масштабирования.
Автор: igor_bogomolov 10.6.2009, 11:42
Цитата(Litkevich Yuriy @ 10.6.2009, 12:20)
А вот нижнюю часть самому рисовать прийдётся.
Сам такого не рисовал, но можно попробовать применить QLinearGradient. Для каждой точки верхнего графика делаем QGradient::setColorAt(qreal position, const QColor & color). Должно получиться что то похожее, как на рисунке у
zss
Автор: Litkevich Yuriy 10.6.2009, 12:16
думаю не прокатит. Т.к.
Верхний график: По вертикали - амплитуда, по горизонтали - время;
Нижний график - масив точек; По вертикали - азимут, по горизонтали - время, Яркость точек - амплитуда
Автор: AD 10.6.2009, 12:22
Цитата(Litkevich Yuriy @ 10.6.2009, 13:16)
думаю не прокатит. Т.к.
Верхний график: По вертикали - амплитуда, по горизонтали - время;
Нижний график - масив точек; По вертикали - азимут, по горизонтали - время, Яркость точек - амплитуда
как раз удовлетворяет условиям отрисовки того, что приведено на моем рисунке. Методы если что смогу подсказать!
на моем графике:
верхний: по вертикали - высота воздушного судна, по горизонтали - пройденное расстояние
нижний: по вертикали - высота рельефа, по горизонтали - расстояние.
Автор: Kagami 14.6.2009, 0:34
Небольшой оффтопик. Посидел пару вечерков и все-таки сделал себе график на Graphics View Framework
Если кому-нибудь понадобится, выложу исходники.
Автор: igor_bogomolov 14.6.2009, 0:59
Цитата(Kagami @ 14.6.2009, 1:34)
Если кому-нибудь понадобится, выложу исходники.
А можно небольшое описание возможностей?
Я бы посмотрел исходнички
Автор: Kagami 14.6.2009, 1:26
Тогда завтра чуть-чуть исходники подчищю и выложу
Автор: Litkevich Yuriy 14.6.2009, 10:21
Цитата(Kagami @ 14.6.2009, 4:34)
сделал себе график на Graphics View Framework
ага интересно.
Автор: Kagami 14.6.2009, 10:34
Вот исходники. Они немного сыроваты, так как писал на скорую руку. Так что сильно не пинайте
В архиве 4 директории
1. bin - в ней будут созданы демонстрационный пример и библиотека
2. grapsh - собственно сама библиотека для построения лепестковой диаграммы. Пока реализован только базовый функционал, в демонстрационных целях.
3. lib - сюда кладется библиотека для линковки (автоматически, ручками ничего копировать не надо)
4. prog - демонстрационный пример. В нем ничего сложного, только необходимо отметить что на виде отключены полосы прокрутки и включен антиалиасинг. У меня в планах сделать наследника от GraphicsView и там все это жестко задать, плюс получить доступ к событиям изменения размера.
Автор: zss 17.6.2009, 15:14
в общем нарисовал свой водопад. под win32 все работает, а вот под wince вообще ничего не происходит.
Рисую QPainter-ом на QPaintDevice.
Почему ? может какая библиотека нужна ?
Автор: Litkevich Yuriy 17.6.2009, 15:37
Цитата(zss @ 17.6.2009, 19:14)
Почему ? может какая библиотека нужна ?
пример выложить можешь?
Автор: zss 17.6.2009, 16:08
Цитата(zss @ 17.6.2009, 16:14)
пример выложить можешь?
блин. написал тестовый пример, который только рисует - все работает. А полный нет.
Где хоть рыть то нужно ?
Автор: Litkevich Yuriy 17.6.2009, 16:10
ну вслепую не угадаешь, клади тестовый пример и расказывай чам отличается полная прога от него. Может заметим, что ты не так делаешь.
Автор: DNF 18.6.2009, 18:45
хм...у меня при компилировании ошибки выдает.. не подскажите в чем дело?...
Автор: ViGOur 18.6.2009, 18:48
Какие ошиби? Покажи.
Автор: DNF 18.6.2009, 23:43
./seriessv.h:24: error: field `seriesList' has incomplete type
./seriessv.h:26: error: field `data' has incomplete type
graphsv.cpp: In constructor `GraphSV::GraphSV(QObject*)':
graphsv.cpp:13: error: 'class QGraphicsPathItem' has no member named 'setOpacity
'
graphsv.cpp: At global scope:
graphsv.cpp:129: warning: non-inline function 'void GraphSV::redraw()' is define
d after prior declaration as dllimport: attribute ignored
graphsv.cpp:129: warning: 'void GraphSV::redraw()' defined locally after being r
eferenced with dllimport linkage
mingw32-make[1]: *** [tmp/obj/release_shared/graphsv.o] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.3.3/progi/graphsv'
mingw32-make: *** [release] Error 2
Автор: Litkevich Yuriy 19.6.2009, 0:13
Цитата(DNF @ 19.6.2009, 3:43)
mingw32-make[1]: Leaving directory `C:/Qt/4.3.3/progi/graphsv'
может дело в версии.
так и есть:
Цитата(DNF @ 19.6.2009, 3:43)
graphsv.cpp:13: error: 'class QGraphicsPathItem' has no member named 'setOpacity
Цитата
void QGraphicsItem::setOpacity ( qreal opacity )
...
This function was introduced in Qt 4.5.
http://doc.crossplatform.ru/qt/4.5.0/qgraphicsitem.html#setOpacity
Автор: DNF 19.6.2009, 0:23
Litkevich Yuriy, спасибо.
Вообщем-то я только на это и думала.Это получается под Qt 4.3.3 её надо переделывать?
Автор: Litkevich Yuriy 19.6.2009, 0:59
Цитата(DNF @ 19.6.2009, 4:23)
Это получается под Qt 4.3.3 её надо переделывать?
ну у автора лучше спросить, для эксперимента можно просто закоментировать соответсвующую часть кода.
Автор: Kagami 19.6.2009, 8:13
Получается надо...
Элемент для которого устанавливалась прозрачность используется для центрирования и масштабирования графика. В принципе, достаточно только закомментировать строку
myBorder->setOpacity(0);
в graphsv.cpp. Но тогда эту границу станет видно
В принципе можно устанавливать для нее цвет равный цвету фона.
P.S. Там еще одна маленькая ошибочка из-за особенности видимости функций в библиотеках под виндой. Поэтому вот новая версия
Автор: Litkevich Yuriy 6.9.2009, 20:03
Тему разделил: http://www.forum.crossplatform.ru/index.php?showtopic=3367
Автор: PunX 4.5.2010, 9:39
Здравствуйте, подскажите пожалуйста какой инструментарий по работе с графиками подойдёт для построения Excel-ских точечных диаграмм вида:
Автор: azure 5.5.2010, 8:21
Цитата(PunX @ 4.5.2010, 9:39)
Здравствуйте, подскажите пожалуйста какой инструментарий по работе с графиками подойдёт для построения Excel-ских точечных диаграмм вида:
Библиотека Qwt, в частности виджет QwtPlot для отрисовки самого графика с осями и легендой и QwtPlotCurve (для кривой)
Автор: PunX 16.5.2010, 22:30
Такой вопрос, А можно ли изменить виджет QwtPlot так, чтобы начало координат было не в левом нижнем углу, а как на рисунке который я размещал в http://www.forum.crossplatform.ru/index.php?s=&showtopic=2892&view=findpost&p=33996 сообщении?
Автор: KuZ 16.5.2010, 23:11
Цитата(PunX @ 16.5.2010, 22:30)
Такой вопрос, А можно ли изменить виджет QwtPlot так, чтобы начало координат было не в левом нижнем углу, а как на рисунке который я размещал в http://www.forum.crossplatform.ru/index.php?s=&showtopic=2892&view=findpost&p=33996 сообщении?
CODE
plot->setAxisScale(QwtPlot::yLeft,-1,1,0.2);
Если не ошибаюсь(насчет последнего параметра) то вот так. А вообще с qwt идет справка там есть "все функции" там можно найти все.
Автор: PunX 17.5.2010, 0:19
Для того чтобы просто вывести точку на график делаю следующее:
ui->qwtPlot->setAxisScale(QwtPlot::yLeft,-0.5,0.5,0.05);
QwtPlotCurve * = new QwtPlotCurve("Curve 1");
double qwea[1];
double ertt[1];
qwea[0]=200;
ertt[0]=0.1;
curve1->setData(qwea,ertt,1);
ui->qwtPlot->replot();
но точка на графике не отображается, пока не очень разобрался с построением, так что чувствую что в коде где-то большая ошибка.
Автор: PunX 17.5.2010, 11:01
Начал разбираться потихоньку, в коде выше ошибок нет. Мне ничего не выводилось потому что была одна точка, как только добавил ещё одну, так сразу же нарисовалась линия. Вопрос следующий, как изменить отображение, т.е. чтобы точки просто отображались на плоскости и не соединялись линиями?
Автор: azure 17.5.2010, 14:15
Цитата(PunX @ 17.5.2010, 11:01)
Вопрос следующий, как изменить отображение, т.е. чтобы точки просто отображались на плоскости и не соединялись линиями?
смотрите описание QwtPlotCurve на предмет SetStyle
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)