Qt Data Visualization データハンドリング
シリーズ
シリーズとは、論理的に接続されたデータ・アイテム(データ・プロキシによって処理される)の集合と、アイテムのメッシュや色など、データ・アイテムのレンダリング方法を記述するビジュアル・プロパティの組み合わせである。それぞれの可視化タイプは、独自のシリーズタイプを持っています。例えば、棒グラフはQBar3DSeries を使用します。すべてのグラフは、複数の系列を同時に追加することができます。
このコード・スニペットは、QBar3DSeries を使用して、棒グラフを円柱として、一様な色ではなくグラデーションでレンダリングする方法を示しています:
Q3DBars graph; QBar3DSeries *series = new QBar3DSeries; QLinearGradient barGradient(0, 0, 1, 100); barGradient.setColorAt(1.0, Qt::white); barGradient.setColorAt(0.0, Qt::black); series->setBaseGradient(barGradient); series->setColorStyle(Q3DTheme::ColorStyleObjectGradient); series->setMesh(QAbstract3DSeries::MeshCylinder); graph->addSeries(series);
データ・プロキシ
ユーザが可視化したいデータは多くのフォーマットで提供され、そのすべてを直接サポートすることは明らかにできません。そのため、Qt Data Visualization は、ユーザが既知のフォーマットでデータを入力できるデータプロキシを実装しています。各可視化タイプには基本プロキシ・タイプがあり、その可視化に適したフォーマットのデータを取り込む。例えば、QBar3DSeries の基本プロキシはQBarDataProxy で、QBarDataItem オブジェクトの行を格納します。各QBarDataItem は1つの小節値を格納する。QBarDataArray
とQBarDataRow
コンテナには、追加の型定義が用意されている。
このコード・スニペットは、データが仮想のmyData
オブジェクトに格納されている場合に、基本プロキシを使用する方法を示しています:
Q3DBars graph; QBarDataProxy *newProxy = new QBarDataProxy; QBarDataArray *dataArray = new QBarDataArray; dataArray->reserve(10); for (int i = 0; i < 10; i++) { QBarDataRow *dataRow = new QBarDataRow(5); for (int j = 0; j < 5; j++) (*dataRow)[j].setValue(myData->getValue(i, j)); dataArray->append(dataRow); } newProxy->resetArray(dataArray); graph->addSeries(new QBar3DSeries(newProxy));
注意: シリーズ・オブジェクトは、一度に1つのプロキシしか所有できません。別のプロキシがシリーズに設定されると、既存のプロキシは削除されます。グラフは複数の系列を含むことができます。2つの異なるデータセット間を行ったり来たりする必要がある場合、通常、切り替える必要があるたびに1つのプロキシ内のデータをリセットするのではなく、各セットを異なるシリーズに格納し、シリーズを変更するだけにした方が効率的です。
項目モデルとデータマッピング
一般的なユースケースのために、Qt Data Visualization は特別なプロキシを提供しています。そのようなケースの一つは、アイテムモデル (QAbstractItemModel サブクラス) にデータを持つことです。これは、Qt アプリケーションでデータを格納する一般的な方法です。それぞれの可視化タイプは、この目的のために特別なプロキシ・クラスを提供しています。例えば、QBar3DSeries のプロキシはQItemModelBarDataProxy です。これらのプロキシは簡単に使用できます。データを含むアイテムモデルへのポインタと、データを基本プロキシが消化できる形式にマッピングするルールを与えるだけです。
マッピングはアイテムモデルのロールで動作します。モデル内の各データ項目は、異なるロールに対して異なる値を持つことができます。例えば、QItemModelBarDataProxy では、項目がどの行に属するかを決定するためにどのロールが使用されるかを指定し、どのロールが列に対して同じことを行い、どのロールが項目の値を指定するかを指定することができます。プロキシがモデルからデータを解決するとき、これらのマッピングを使用して棒グラフの行と列を生成します。
多くの場合、項目モデルは、複数の値にマッピングしたい情報を含む単一のロールを持ちます。この典型的な例は、例えば年月のような、時間に関連する 2 つの軸を持つ棒グラフを生成するときのタイムスタンプ・フィールドです。1つの項目モデル・ロールを複数のデータ・フィールドにマッピングできるようにするために、項目モデル・プロキシによってパターンマッチングと置換のメカニズムが提供されます。また、1対1のマッピングの場合でも、このメカニズムを使用してデータを再フォーマットすることができます。
可視化タイプによっては、プロキシは他の機能もサポートします。例えば、QItemModelBarDataProxy オプションで、QAbstractItemModel の行と列を棒グラフの行と列に直接マッピングすることができます。
プロキシの使い方の詳細や例については、個々のプロキシクラスを参照してください:QItemModelBarDataProxy QItemModelScatterDataProxy およびQItemModelSurfaceDataProxy を参照してください。
その他のカスタムプロキシ
QHeightMapSurfaceDataProxy は、ハイトマップ画像からサーフェスグラフを生成するための特殊なプロキシです。詳細は のドキュメントを参照してください。QHeightMapSurfaceDataProxy
グラフギャラリーの例では、Bar Graph タブの下に、カスタムプロキシがどのように作成できるかを示しています。これは、バリアントリストに基づいたカスタムデータセットと、関連するマッパーでそのデータを解決する基本プロキシの拡張を定義します。
リアルタイムデータの扱い
高速に更新されるデータセットがある場合、良いパフォーマンスを保証するためにデータを適切に扱うことが重要です。メモリの割り当てはコストのかかる操作なので、プロキシに渡す 配列を構築するときに不必要な再割り当てを避けるために、可能な限りQList::reserve() とQList::resize() を常に使用する。フレームごとにデータセット全体を変更する必要がある場合は、ほとんどの場合、既存の配列を再利用するのが最善です。各フレームに対して複数の行や項目を追加、挿入、削除、変更する必要がある場合は、1 つの行や項目に対して複数のメソッドをコールするよりも、1 つのメソッドをコールする方が常に効率的です。たとえば、QBarDataProxy::addRow ()を 10 回呼び出すよりも、QBarDataProxy::addRows ()を 1 回呼び出す方がはるかに効率的です。
Barsレンダラーは、データウィンドウ内のデータのみにアクセスするように最適化されているため、プロキシに継続的にデータが追加されても、顕著な速度低下は発生しないはずです。
スキャッターデータはソートされていないため、データウィンドウの範囲を変更すると、すべてのデータポイントの可視性をチェックする必要があります。散布図で最高のパフォーマンスを得るためには、必要なデータだけをプロキシに保持してください。
サーフェスデータは、アイテムレベルでは散布図データと似ていますが、すでに行と列に割り当てられているため、サーフェスレンダラは行と列のデータがそれぞれの軸に沿ってソートされていると仮定することで描画を最適化できます。棒グラフの場合ほど効率的ではないが、ほぼそうなる。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.