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 은 단일 막대 값을 저장합니다. QBarDataArrayQBarDataRow 컨테이너에 대한 추가 typedef가 제공됩니다.

이 코드 조각은 데이터가 가상의 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));

참고: 시리즈 객체는 한 번에 하나의 프록시만 소유할 수 있습니다. 다른 프록시가 시리즈로 설정되면 기존 프록시는 삭제됩니다. 하지만 그래프에는 여러 개의 계열을 포함할 수 있습니다. 서로 다른 두 데이터 세트 사이를 전환해야 하는 경우 일반적으로 전환해야 할 때마다 하나의 프록시에서 데이터를 재설정하는 것보다 각 세트를 다른 시리즈에 저장하고 시리즈만 변경하는 것이 더 효율적입니다.

항목 모델 및 데이터 매핑

일반적인 사용 사례의 경우 Qt Data Visualization 에서 특수 프록시를 제공합니다. 이러한 경우 중 하나는 Qt 애플리케이션에서 데이터를 저장하는 일반적인 방법인 항목 모델(QAbstractItemModel 서브클래스)에 데이터를 저장하는 것입니다. 각 시각화 유형은 이러한 목적을 위한 특수 프록시 클래스를 제공합니다(예: QBar3DSeries 의 경우 QItemModelBarDataProxy ). 이러한 프록시는 사용이 간단합니다. 데이터를 포함하는 항목 모델에 대한 포인터와 기본 프록시가 소화할 수 있는 형식으로 데이터를 매핑하는 규칙을 제공하기만 하면 됩니다.

매핑은 항목 모델 역할과 함께 작동합니다. 모델의 각 데이터 항목은 역할에 따라 서로 다른 값을 가질 수 있습니다. 예를 들어 QItemModelBarDataProxy 을 사용하면 항목이 속한 행을 결정하는 데 사용되는 역할, 열에 대해 동일한 역할을 수행하는 역할, 항목의 값을 지정하는 역할을 지정할 수 있습니다. 프록시는 모델에서 데이터를 확인할 때 이러한 매핑을 사용하여 막대 그래프의 행과 열을 생성합니다.

항목 모델에는 여러 값에 매핑하려는 정보가 포함된 단일 역할이 있는 경우가 많습니다. 예를 들어 연도와 월 등 두 개의 시간 관련 축이 있는 막대 그래프를 생성할 때 타임스탬프 필드가 대표적인 예입니다. 단일 항목 모델 역할을 둘 이상의 데이터 필드에 매핑할 수 있도록 항목 모델 프록시에서 패턴 일치 및 바꾸기 메커니즘을 제공합니다. 일대일 매핑의 경우에도 이 메커니즘을 사용하여 데이터를 다시 포맷할 수 있습니다.

시각화 유형에 따라 프록시는 QItemModelBarDataProxy 행과 열을 막대 그래프 행과 열에 직접 매핑하는 것과 같은 다른 기능도 지원할 수 있습니다(예: QAbstractItemModel 선택적으로 행과 열을 막대 그래프 행과 열에 직접 매핑).

프록시 사용 방법에 대한 자세한 내용과 예제는 개별 프록시 클래스를 참조하세요: QItemModelBarDataProxy, QItemModelScatterDataProxy, QItemModelSurfaceDataProxy 을 참조하세요.

기타 사용자 정의 프록시

QHeightMapSurfaceDataProxy 는 하이트맵 이미지에서 서피스 그래프를 생성하기 위한 특수 프록시입니다. 자세한 내용은 QHeightMapSurfaceDataProxy 문서를 참조하세요.

그래프 갤러리 예시에서는 Bar Graph 탭에서 사용자 지정 프록시를 만드는 방법을 보여줍니다. 여기에서는 변형 목록에 기반한 사용자 지정 데이터 세트와 연결된 매퍼로 해당 데이터를 해결하기 위한 기본 프록시의 확장을 정의합니다.

실시간 데이터 처리하기

빠르게 업데이트되는 데이터 세트가 있는 경우 좋은 성능을 보장하려면 데이터를 적절하게 처리하는 것이 중요합니다. 메모리 할당은 비용이 많이 드는 작업이므로 프록시에 제공할 배열을 구성할 때는 가능한 경우 항상 QList::reserve() 및 QList::resize()을 사용하여 불필요한 재할당을 피하세요. 각 프레임의 전체 데이터 세트를 변경해야 하는 경우, 특히 배열 크기가 변경되지 않는 경우에는 기존 배열을 재사용하는 것이 대부분의 경우 가장 좋습니다. 각 프레임에 대해 여러 행이나 항목을 추가, 삽입, 제거 또는 변경해야 하는 경우, 각각 하나의 행이나 항목에 영향을 미치는 여러 호출 대신 한 번의 메서드 호출로 수행하는 것이 항상 더 효율적입니다. 예를 들어 하나의 QBarDataProxy::addRows() 호출로 10개의 행을 추가하는 것이 10개의 개별 QBarDataProxy::addRow() 호출보다 훨씬 더 효율적입니다.

막대 렌더러는 데이터 창 내에 있는 데이터에만 액세스하도록 최적화되어 있으므로 프록시에 계속해서 더 많은 데이터가 추가되더라도 속도가 눈에 띄게 느려지지 않습니다.

분산형 데이터의 정렬되지 않은 특성으로 인해 데이터 창 범위가 변경되면 모든 데이터 포인트의 표시 여부를 확인해야 하므로 프록시에 데이터가 계속 추가될 경우 속도가 느려질 수 있습니다. 분산형 그래프에서 최상의 성능을 얻으려면 필요한 데이터만 프록시에 보관하세요.

서피스 데이터는 분산형 데이터와 유사한 항목 수준에서 이미 행과 열로 할당되어 있으므로 서피스 렌더러는 행과 열의 데이터가 각각의 축을 따라 정렬되어 있다고 가정하여 그리기를 최적화할 수 있습니다. 막대의 경우만큼 효율적이지는 않지만 거의 비슷합니다.

© 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.