Пользовательская ось QwtPlot - PullRequest
4 голосов
/ 18 октября 2011

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

Есть предложения?

1 Ответ

1 голос
/ 22 ноября 2013

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

Сначала я бы порекомендовал вам взглянуть на документацию 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).

...