使用QCustomPlot绘图的基础
首先你用QCustomPlot::addGraph创建一个曲线图然后你给曲线图赋一些数据点(一对QVector<double>为x,y的值)并且定义曲线图的外观(线型,分散图案,颜色,线笔)子厚调用QCustomPlot::replot。注意replot应该被自动调用当widget被重新改变大小的时候或者内建的用户交互被触发的时候(拖拽坐标轴范围用鼠标或者齿轮),莫ten情况下QCustomPlot有四个类型为QCPAxis的坐标轴:xAxis,yAxis,xAxis2,yAxis2。组成了下,左,上,右四个坐标轴。他们的范围(QCPAxis::setRange)定义了Plot当前可见的部分。
这有一个小例子customPlot是一个QCustomPlot widget的指针。
输出应该看起来跟下面一样。注意刻度线的位置是被自动选择的。然而乜可以完全控制刻度步长甚至单一刻度位置通过调用setTickStep或者setTickVector在各自的轴上。为了禁用和可用自动化,电泳setAutoTickStep或
正如你看到的,应用填充凸显跟设置一个画刷一样容易但不是Qt::NoBrush.填充从图像开始到与坐标轴平行的0值线。如果我们想要在一个graph和另一个graph之间填充的通道可以调用QCPGraph::setChannelFillGraph(otherGraph).为了删除通道填充,只需要将零值线作为另一个图形并且填充将可以达到所有的方式来把之前的作为零值线。为了完全移除填充调用QCPGraph::setBrush(Qt::NoBrush);
Plotting with multiple axes and more advanced styleing
绘制多轴和更高级的样式
现在看一些复杂的例子为了创建演示截图,在四个坐标轴上包括了五个graphs,纹理填充,垂直误差,图例,点作为小数分隔符等等。
正如你所见,你可以自由的定义那个轴作为对graph起作用。例子中索引为0的graph使用了左轴作为它的key并且下轴作为它的值。因此graph是朝着左轴向上的。
为了对graph1应用误差线,我们需要确保它们设置了QCPGraph::setErrorType().它常用来指定是否为这个值,键,或者两者或者都不显示误差线。然后我们可以调用QCPGraph::setData函数将传递我们想要的参数。这有keys(x1),value(y1)和误差值(ylerr)。为了进一步的解释这个方法的使用可以查看文档。
Plotting date and time data
下面,我们将看到如何绘制日期和时间关联的数据。它基本可以归结为两个额外的函数调用来通知坐标轴,它应该输出标签作为日期或者时间。
你可以给QCPAxis::setDateTimeFormate()传递一个字符串有相同的格式选项跟QDateTime::toString。所有的date/time都被作为秒来控制从1970.1.1 凌晨12点开始。这就是你使用的格式,当调用QDateTime::toTime_t或者setTime_t在Qt date/time类中。为了达到次秒级的精度,你可以使用QDateTime::toMSecsSinceEpoch()/1000.0结果是double值代表与toTime_t返回一样的时间间隔,但是是毫秒级的精度。
Beyond Graphs:Curves,Bar Charts,Statistical Box Plot...
到目前位置我们只看了Graph.因为它们是这样一个占主导地位的用例,QCustomPlot为他们提供一个特化的接口。我们始终使用它QCustomPlot::addGraph,QCustomPlot::graph.这不是故事的全部。QCustomPlot有更一般的接口来为不同的对象在Plot里绘制数据。我可以称它们为Plottables.这个接口围绕抽象基类QCPAbstractPlottable被创建。所有的Plottables派生自这个类并且跟QCPGraph这个类相似。QCustomPlot提供了很多其他的Plottable类。
QCPGraph
这是一个plottable类,显示一些列数据点作为graph.
QCPCurve
跟QCPGraph类似用不同的参数化的曲线组成。不像函数graph它们有封闭的环形。
QCPBar
一个柱状图。带有一系列的数据点和代表它们的柱状图。如果这有多个QCPBars plottables.他们可以堆叠在彼此顶方。
QCPStatisticalBox
一个统计框。带着五个数字(minium,lower quartile,midian,upper quartile,maximum)。
QCPColorMap
一个2D map可视化第三维度的数据通过使用一个渐变颜色。
QCPFinancial
一个plottable可以被用来可视化像股票的开盘价,最高,最低,收盘价通过使用Candlesticks或者OHLC bars
不像graphs,其他的plottables需要通过使用外面的QCustomPlot来创建并且把它们添加到里面QCustomPlot::addPlottable.这意味着这没有addCurver或者addBar函数。QCustomPlot传递plottable的所有权。已经存在的plottables可以通过QCustomPlot::plottable(int index)来访问。plottable包括graph的数量可以使用QCustomPlot::plottableCount来检索。这有一个很简单的例子创建一个带有三个柱状的柱状图。
关于其他plottables更多的细节可以在实例里面被发现。更进一步,每一个plottable类型都在文档里有详细的描述。
当然,这是绝对可以的编写你自己的plottable来显示你需要的任意数据。你应该查看QCPAbstractPlottable文档来学习如何子类化它。你也可以查看已经存在的plottables来看他们如何工作。为了这个目的我建议从QCPBar或者QCPCurve开始。QCPGraph特征很多不适合作为一个开始。
首先你用QCustomPlot::addGraph创建一个曲线图然后你给曲线图赋一些数据点(一对QVector<double>为x,y的值)并且定义曲线图的外观(线型,分散图案,颜色,线笔)子厚调用QCustomPlot::replot。注意replot应该被自动调用当widget被重新改变大小的时候或者内建的用户交互被触发的时候(拖拽坐标轴范围用鼠标或者齿轮),莫ten情况下QCustomPlot有四个类型为QCPAxis的坐标轴:xAxis,yAxis,xAxis2,yAxis2。组成了下,左,上,右四个坐标轴。他们的范围(QCPAxis::setRange)定义了Plot当前可见的部分。
这有一个小例子customPlot是一个QCustomPlot widget的指针。
输出应该看起来跟下面一样。注意刻度线的位置是被自动选择的。然而乜可以完全控制刻度步长甚至单一刻度位置通过调用setTickStep或者setTickVector在各自的轴上。为了禁用和可用自动化,电泳setAutoTickStep或
正如你看到的,应用填充凸显跟设置一个画刷一样容易但不是Qt::NoBrush.填充从图像开始到与坐标轴平行的0值线。如果我们想要在一个graph和另一个graph之间填充的通道可以调用QCPGraph::setChannelFillGraph(otherGraph).为了删除通道填充,只需要将零值线作为另一个图形并且填充将可以达到所有的方式来把之前的作为零值线。为了完全移除填充调用QCPGraph::setBrush(Qt::NoBrush);
Plotting with multiple axes and more advanced styleing
绘制多轴和更高级的样式
现在看一些复杂的例子为了创建演示截图,在四个坐标轴上包括了五个graphs,纹理填充,垂直误差,图例,点作为小数分隔符等等。
正如你所见,你可以自由的定义那个轴作为对graph起作用。例子中索引为0的graph使用了左轴作为它的key并且下轴作为它的值。因此graph是朝着左轴向上的。
为了对graph1应用误差线,我们需要确保它们设置了QCPGraph::setErrorType().它常用来指定是否为这个值,键,或者两者或者都不显示误差线。然后我们可以调用QCPGraph::setData函数将传递我们想要的参数。这有keys(x1),value(y1)和误差值(ylerr)。为了进一步的解释这个方法的使用可以查看文档。
Plotting date and time data
下面,我们将看到如何绘制日期和时间关联的数据。它基本可以归结为两个额外的函数调用来通知坐标轴,它应该输出标签作为日期或者时间。
你可以给QCPAxis::setDateTimeFormate()传递一个字符串有相同的格式选项跟QDateTime::toString。所有的date/time都被作为秒来控制从1970.1.1 凌晨12点开始。这就是你使用的格式,当调用QDateTime::toTime_t或者setTime_t在Qt date/time类中。为了达到次秒级的精度,你可以使用QDateTime::toMSecsSinceEpoch()/1000.0结果是double值代表与toTime_t返回一样的时间间隔,但是是毫秒级的精度。
Beyond Graphs:Curves,Bar Charts,Statistical Box Plot...
到目前位置我们只看了Graph.因为它们是这样一个占主导地位的用例,QCustomPlot为他们提供一个特化的接口。我们始终使用它QCustomPlot::addGraph,QCustomPlot::graph.这不是故事的全部。QCustomPlot有更一般的接口来为不同的对象在Plot里绘制数据。我可以称它们为Plottables.这个接口围绕抽象基类QCPAbstractPlottable被创建。所有的Plottables派生自这个类并且跟QCPGraph这个类相似。QCustomPlot提供了很多其他的Plottable类。
QCPGraph
这是一个plottable类,显示一些列数据点作为graph.
QCPCurve
跟QCPGraph类似用不同的参数化的曲线组成。不像函数graph它们有封闭的环形。
QCPBar
一个柱状图。带有一系列的数据点和代表它们的柱状图。如果这有多个QCPBars plottables.他们可以堆叠在彼此顶方。
QCPStatisticalBox
一个统计框。带着五个数字(minium,lower quartile,midian,upper quartile,maximum)。
QCPColorMap
一个2D map可视化第三维度的数据通过使用一个渐变颜色。
QCPFinancial
一个plottable可以被用来可视化像股票的开盘价,最高,最低,收盘价通过使用Candlesticks或者OHLC bars
不像graphs,其他的plottables需要通过使用外面的QCustomPlot来创建并且把它们添加到里面QCustomPlot::addPlottable.这意味着这没有addCurver或者addBar函数。QCustomPlot传递plottable的所有权。已经存在的plottables可以通过QCustomPlot::plottable(int index)来访问。plottable包括graph的数量可以使用QCustomPlot::plottableCount来检索。这有一个很简单的例子创建一个带有三个柱状的柱状图。
关于其他plottables更多的细节可以在实例里面被发现。更进一步,每一个plottable类型都在文档里有详细的描述。
当然,这是绝对可以的编写你自己的plottable来显示你需要的任意数据。你应该查看QCPAbstractPlottable文档来学习如何子类化它。你也可以查看已经存在的plottables来看他们如何工作。为了这个目的我建议从QCPBar或者QCPCurve开始。QCPGraph特征很多不适合作为一个开始。