2 つの横軸を持つプロットを作成したいと考えています。下の軸は線形、上の軸は非線形です。「ボトム値 -> トップ値」の変換用のデータの表があります。QwtScaleEngine がこの機能を提供することがわかりました。しかし、QwtScaleEngine と QwtScaleDiv のサブクラスで定義するには文書化されていない関数が多すぎるため、機能させることはできません。
助言がありますか?
2 つの横軸で、1 つの軸を共有する 2 つのプロットを効果的に重ね合わせますか?それとも、最初の横軸の追加の表現 (たとえば、異なる単位) を提供するだけですか? あまり関係ないかもしれませんが、あなたの問題を理解しようとしているだけです。
QwtPlot::updateAxes()
最初にドキュメントをご覧になることをお勧めします。これは、Qwt の公式ドキュメントで、プロット、スケール エンジン、およびスケール分割の関係について私が見つけた最良の説明です。Qwt の文書化が不十分だとは思いませんが、概念の高レベルな説明が不足していると思います。
QwtScaleDiv は、軸の境界と、場合によっては目盛りの値を含むコンテナー タイプのように見えます。QwtScaleDiv をサブクラス化する必要があるとは思えません。
この変換に関係していることは正しいですがQwtScaleEngine
、少なくとも Qwt 6.1.0 では、もう少し処理が必要です。setTransformation(QwtScaleEngine
) で変換の概念 ( QwtTransform
) をサポートします。変換が対数関数、指数関数、二次関数、三次関数などの単純な数学関数である場合は、QwtPowerTransformまたは. これらが当てはまらない場合は、独自のものを実装してに割り当てることができます。私の知る限り、変換は双方向でなければなりません。QwtLogTransform
QwtTransform
QwtScaleEngine
transform
invTransform
. 私の経験では、グリッド線、ゾーンなど、スケール エンジンが関連付けられている軸に関連付けられているすべてのプロット アイテムの値も変換する必要があります。デフォルト以外のスケール エンジンで変換を使用しようとしたことはありませんが、うまくいきましQwtLinearScaleEngine
た. 強力なコンセプトです。また、SVN プレイグラウンド(6.1.0) の scaleengine の例を見てください。