ImPlot
是一个用于绘制图表的即插即用的图形库,通常与 Dear ImGui
配合使用。在 ImPlot
中,ImPlot::PlotScatter
和 ImPlot::PlotLine
是两个用于绘制散点图和折线图的函数。
ImPlot::PlotScatter
ImPlot::PlotScatter
用于绘制散点图,显示一组数据点而不连接它们。
函数原型
void ImPlot::PlotScatter(const char* label_id, const float* values_x, const float* values_y, int count, int offset = 0, int stride = sizeof(float));
参数解释
label_id
: 数据集的标签,用于标识图表中的数据点。values_x
: x 轴数据数组的指针。values_y
: y 轴数据数组的指针。count
: 数据点的数量。offset
(可选): 数据数组中的偏移量,默认值为 0。stride
(可选): 数据点的跨度(步幅),默认值为sizeof(float)
。
示例代码
#include "imgui.h"
#include "implot.h"
void PlotExample() {
if (ImPlot::BeginPlot("Scatter Plot")) {
float x_data[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
float y_data[] = {10.0f, 15.0f, 8.0f, 12.0f, 20.0f};
ImPlot::PlotScatter("Scatter Data", x_data, y_data, 5);
ImPlot::EndPlot();
}
}
ImPlot::PlotLine
ImPlot::PlotLine
用于绘制折线图,显示一组数据点并用线条将它们连接起来。
函数原型
void ImPlot::PlotLine(const char* label_id, const float* values_x, const float* values_y, int count, int offset = 0, int stride = sizeof(float));
参数解释
label_id
: 数据集的标签,用于标识图表中的数据点。values_x
: x 轴数据数组的指针。values_y
: y 轴数据数组的指针。count
: 数据点的数量。offset
(可选): 数据数组中的偏移量,默认值为 0。stride
(可选): 数据点的跨度(步幅),默认值为sizeof(float)
。
示例代码
#include "imgui.h"
#include "implot.h"
void PlotExample() {
if (ImPlot::BeginPlot("Line Plot")) {
float x_data[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
float y_data[] = {10.0f, 15.0f, 8.0f, 12.0f, 20.0f};
ImPlot::PlotLine("Line Data", x_data, y_data, 5);
ImPlot::EndPlot();
}
}
综合示例
下面是一个综合示例,展示如何在一个窗口中绘制散点图和折线图:
#include "imgui.h"
#include "implot.h"
void PlotExample() {
ImGui::Begin("Plot Example");
// 开始一个新的绘图区域
if (ImPlot::BeginPlot("Scatter and Line Plot")) {
// 数据点
float x_data[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
float y_data[] = {10.0f, 15.0f, 8.0f, 12.0f, 20.0f};
// 绘制散点图
ImPlot::PlotScatter("Scatter Data", x_data, y_data, 5);
// 绘制折线图
ImPlot::PlotLine("Line Data", x_data, y_data, 5);
// 结束绘图区域
ImPlot::EndPlot();
}
ImGui::End();
}
在这个综合示例中,我们在一个窗口中同时绘制了散点图和折线图。这展示了如何在同一个绘图区域中绘制多个数据集,以及如何使用 ImPlot::PlotScatter
和 ImPlot::PlotLine
函数。