Пользовательская ось QwtPlot

Я хочу создать сюжет с двумя горизонтальными осями. Нижняя ось линейная, верхняя ось нелинейная. У меня есть таблица данных для преобразования «Нижнее значение -> верхнее значение». Я узнал, что QwtScaleEngine предоставляет эту функциональность. Но я не могу заставить его работать, потому что слишком много плохо документированных функций для определения в подклассах QwtScaleEngine и QwtScaleDiv.

Какие-либо предложения?


person Pavel Strakhov    schedule 18.10.2011    source источник


Ответы (1)


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

Сначала я рекомендую вам ознакомиться с QwtPlot::updateAxes() документацией. Это лучшее описание взаимосвязи между графиком, механизмами масштабирования и делениями масштаба, которое я нашел в официальной документации Qwt. Хотя я не думаю, что Qwt плохо документирован, я думаю, что ему не хватает высокоуровневого описания концепций.

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

Вы правы в том, что в этом преобразовании участвует QwtScaleEngine, но это еще не все, на по крайней мере в Qwt 6.1.0. QwtScaleEngine поддерживает концепцию трансформации (QwtTransform) с setTransformation(). Если ваше преобразование представляет собой простую математическую функцию, такую ​​как логарифмическая, экспоненциальная, квадратичная, кубическая функция и т. д., вы должны иметь возможность использовать QwtPowerTransform или QwtLogTransform. Если они неприменимы, вы можете реализовать свой собственный QwtTransform и назначить его QwtScaleEngine. Насколько мне известно, трансформация должна быть двусторонней, то есть реализовывать как transform, так и invTransform. По моему опыту, он также должен преобразовывать значения для всех элементов графика, связанных с осью, с которой связан механизм масштабирования, включая линии сетки, зоны и т. д. Я не пытался использовать преобразования в других механизмах масштабирования, кроме стандартного QwtLinearScaleEngine, но это отлично сработало. Это мощная концепция. Кроме того, взгляните на пример ScaleEngine в площадка SVN (6.1.0).

person Knut Vidar Siem    schedule 22.11.2013