QTCustomPlot文档

说明

这是从网上手动翻译的

Plottables

Plottables是在QCustomPlot中显示任何类型数据的类。它们都来自QCPAbstractPlottable。例如,QCPGraph是一个可绘图的图形,它显示具有不同线条样式、分散样式、填充等的图形。

由于绘制图形是一个如此重要的用例,QCustomPlot有一个特殊的接口来使用QCPGraph绘图仪,这使得处理它们非常容易:

可以使用QCustomPlot::addGraph创建新图,并使用QCustomPlot::graph访问新图。

对于所有其他绘图仪,使用普通的绘图仪接口:首先,创建各自的绘图仪实例并添加到QCustomPlot,例如。

QCPCurve *newCurve = new QCPCurve(customPlot->xAxis, customPlot->yAxis);

然后可以通过newCurve指针访问新创建的绘图仪的属性。

可通过QCustomPlot::plottable检索绘图(包括图形)。由于该函数的返回类型是所有可绘图板的抽象基类QCPAbstractPlottable,因此您可能希望qobject_cast将返回的指针转换为相应的可绘图板子类。和往常一样,如果绘图板不是特定的子类,强制转换将返回0。

所有进一步接口的绘图仪(e。如何设置数据)是特定于绘图类型。参见子类的文档:QCPGraph、QCPCurve、QCPBars、QCPStatisticalBox、QCPColorMap、QCPFinancial。

Controlling the Axes

QCustomPlot有四个默认轴:xAxis(底部)、yAxis(左侧)、xAxis2(顶部)、yAxis2(右侧)。

它们的范围是由简单的QCPRange类处理的,这个类基本上包含上下轴坐标。您可以使用QCPAxis::setRange函数设置范围。若要将轴标度类型从线性标度更改为对数标度,请将QCPAxis::setScaleType设置为QCPAxis:: st对数。在这种情况下,您还需要以对数间隔的刻度和刻度标签,因此使用QCPAxis::setTicker将axis ticker设置为QCPAxisTickerLog实例。

每个轴可以被赋予一个轴标签(例如。“电压(mV)”)与QCPAxis::setLabel。

默认情况下,axis会以一种合理的方式自动创建和标记刻度。有关微调,请参阅QCPAxis文档中的各种方法。可以通过QCPAxis::setTicks禁用轴的刻度。如果您只想隐藏刻度标签(数字),请使用QCPAxis:: setticktags。请注意,默认的右轴和顶轴从隐藏的刻度标签开始。

轴骨干到各个视图/小部件边界的距离称为其边界。通常,边距会自动计算以适应轴和刻度标签。要更改此设置,请设置QCPAxisRect::setAutoMargins以排除相应的边距,并使用QCPAxisRect:: setmargin手动设置边距。可以使用QCustomPlot::axisRect()访问主轴矩形。在QCPAxisRect和QCPAxis文档中详细解释了不同的边距/填充/偏移选项。

Plot Legend

默认情况下,每个QCustomPlot都有一个QCPLegend(作为QCustomPlot::legend)。图例是plot中的一个小布局元素,它用一个可绘图板行/符号图标和一个名称(QCPAbstractPlottable::setName)列出可绘图板。绘图板可以通过QCPAbstractPlottable::addToLegend和QCPAbstractPlottable::removeFromLegend从图例中添加和删除。默认情况下,向QCustomPlot添加一个绘图板也会自动将其添加到图例中。可以使用QCustomPlot::setAutoAddPlottableToLegend属性更改此行为。

QCPLegend还提供了一个接口,可以直接访问、添加和删除图例项。参见QCPLegend::item, QCPLegend::itemWithPlottable, QCPLegend::addItem, QCPLegend::removeItem等。

布局系统支持多个图例(因为QCPLegend是一个普通的布局元素)。

User Interaction

QCustomPlot支持使用鼠标拖动轴的范围(QCPAxisRect::setRangeDrag),使用鼠标滚轮缩放轴的范围(QCPAxisRect::setRangeZoom),以及一个完整的选择机制,它的粒度可配置到数据点和数据范围。

这些交互的可用性由QCustomPlot:: setinteraction控制。有关交互系统的详细信息,请参阅那里的文档。在专用数据选择机制页面上详细讨论了数据选择。

此外,当对象被单击或双击时,QCustomPlot总是发出相应的信号。例如,参见QCustomPlot::plottableClick、QCustomPlot::plottableDoubleClick和QCustomPlot::axisClick。

最后,在最低级别上,您可以在自己的子类中使用QCPLayerable鼠标事件虚拟方法,QCustomPlot实例调用受影响的layerable。

Decorations and Auxiliary Items

除了可绘图对象,还有另一类重要的绘图对象:项。所有项的基类都是QCPAbstractItem。项目与可标绘对象的区别在于它不需要绑定到任何轴上。这意味着它也可以定位在绝对像素坐标中,也可以定位在轴矩形上的相对位置。此外,它通常不直接表示数据,而是作为装饰、强调、描述等。

考虑到动态行为,可以在父-子层次结构中安排多个项。例如,你可以把箭头的头部放在一个固定的坐标上,所以它总是指向图中某个重要的区域。箭头的尾部可以锚定到文本项,该文本项始终位于axis rect的顶部中心,与用户拖动轴范围的位置无关。这样,箭头就会拉伸并旋转,因此它总是从标签指向指定的绘图坐标,而不需要任何进一步的代码。

有关更详细的介绍,请参阅QCPAbstractItem文档,并从中了解各个标准项的文档,以了解如何使用它们。

Layout Elements and Layouts

QCustomPlot使用一个内部布局系统来提供对象的动态大小和位置,如轴矩形、图例、颜色刻度和其他布局元素。它们都基于QCPLayoutElement,并通过将它们放置在QCPLayout子类(如QCPLayoutGrid)中来安排。

OpenGL Accelerated Plotting and Performance Improvement

QCustomPlot有多个OpenGL后端,可以跨所有支持的Qt版本提供OpenGL硬件加速绘图。如果计算机支持OpenGL,您可以通过使用QCUSTOMPLOT_USE_OPENGL编译并在相应的QCustomPlot实例上调用setOpenGl(true)来启用它。该方法的文档中给出了更多细节。

关于如何为高要求的可视化任务最大化地块性能的信息,可以在关于地块性能改进的专页上找到。

Preprocessor Define Flags

QCustomPlot理解一些对调试和编译有用的预处理器定义。在包含QCustomPlot标头之前,必须定义标志。通常,最好使用define += QCUSTOMPLOT_USE_OPENGL将它们添加到qmake项目文件中

QCUSTOMPLOT_USE_OPENGL

如果定义了这个标志,QCustomPlot可以使用OpenGL来提高绘图需求图的绘图性能,参见QCustomPlot::setOpenGl。

QCUSTOMPLOT_COMPILE_LIBRARY

将QCustomPlot编译为共享库(.so/.dll)时定义此标志

QCUSTOMPLOT_USE_LIBRARY

当使用QCustomPlot作为共享库时,在包含标题之前定义此标志

QCUSTOMPLOT_CHECK_DATA

如果定义了此标志,QCustomPlot绘图仪将在每次重绘时执行数据有效性检查。当遇到inf或nan值时,它们将给出qDebug输出(如果有意使用静默的NaNs在图中创建间隙,也会给出qDebug输出)。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QtCustomPlot是一个基于Qt的数据可视化库,可以用于绘制各种图表,包括轮廓图。轮廓图也称为等高线图,主要用于表示二维数据的等高线分布情况。 要在QtCustomPlot中绘制轮廓图,可以使用QCPColorMap类。该类可以将数据映射到颜色,从而实现轮廓图的绘制。具体步骤如下: 1. 创建QCPColorMap对象,并将其添加到QCustomPlot中。 2. 设置数据范围和颜色映射。 3. 添加轮廓线和标签,以便更好地展示数据。 下面是一个简单的例子,展示如何在QtCustomPlot中绘制轮廓图: ```c++ // 创建QCustomPlot对象 QCustomPlot *customPlot = new QCustomPlot(this); // 创建QCPColorMap对象,并添加到QCustomPlotQCPColorMap *colorMap = new QCPColorMap(customPlot->xAxis, customPlot->yAxis); customPlot->addPlottable(colorMap); // 设置数据范围和颜色映射 colorMap->data()->setSize(nx, ny); colorMap->data()->setRange(QCPRange(xMin, xMax), QCPRange(yMin, yMax)); for (int x=0; x<nx; ++x) { for (int y=0; y<ny; ++y) { double z = getData(x, y); // 获取数据 colorMap->data()->setCell(x, y, z); } } colorMap->setGradient(QCPColorGradient::gpJet); // 设置颜色渐变 // 添加轮廓线和标签 QCPColorMap *colorScale = new QCPColorMap(customPlot->xAxis2, customPlot->yAxis); customPlot->plotLayout()->addElement(0, 1, colorScale); colorScale->setDataRange(QCPRange(zMin, zMax)); colorScale->setGradient(QCPColorGradient::gpJet); colorScale->setData(colorMap->data()); colorScale->setColorScaleType(QCPAxis::stGradient); ``` 这是一个简单的例子,实际上还可以对轮廓图进行更多的设置,如设置轮廓线的粗细、颜色等。如果需要更多的帮助或者例子,请参考QtCustomPlot的官方文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值