使用 glut、opengl 绘制散点图矩阵

Posted

技术标签:

【中文标题】使用 glut、opengl 绘制散点图矩阵【英文标题】:Draw a scatterplot matrix using glut, opengl 【发布时间】:2012-03-29 23:23:30 【问题描述】:

我是 GLUT 和 opengl 的新手。我需要为 n 维数组绘制散点图矩阵。 我已将 csv 中的数据保存到向量向量中,每个向量对应一行。我只绘制了一个散点图。并使用 GL_LINES 绘制网格。我的问题 1. 如何在特定网格中绘制点?使用 GL_POINTS 我只能在整个窗口中绘制点。

如果需要任何进一步的信息来回答这个问题,请告诉我

谢谢

【问题讨论】:

“在特定网格中绘制点”是什么意思?您的意思是要使用虚线绘制网格还是要以与您的数据范围相匹配的坐标比例绘制点? 我需要将窗口划分为多个区域并在这些区域中绘制点。每个区域/网格指的是一个散点图。假设我有 400*400 的窗口。我分成4个相等的区域。我真的不知道这是如何工作的,因为我对此完全陌生。 【参考方案1】:

您需要做的是能够将数据的 (x,y) 坐标转换为屏幕坐标。最直接的方法实际上并不依赖于 OpenGL 或 GLUT。你所要做的就是使用一点数学。确定您希望 (0,0) 的数据点在屏幕上的位置的屏幕 (x,y) 坐标,然后确定您希望一个增量在屏幕上的距离。只需获取原始数据点,应用偏移量,然后对其进行缩放,即可获得屏幕坐标,然后将其传递给 glVertex2f()(或您用于在 API 中指定点的任何函数)。

例如,您可能决定希望数据中的点 (0,0) 位于屏幕上的位置 (200,0),并且数据中 0 和 1 之间的距离在屏幕上为 30 像素.此操作将如下所示:

int x = 0, y = 0;  //Original data points
int scaleX = 30, scaleY = 30;  //Scaling values for each component
int offsetX = 100, offsetY = 100;  //Where you want the origin of your graph to be

// Apply the scaling values and offsets:
int screenX = x * scaleX + offsetX;
int screenY = y * scaleY + offsetY;

// Calls to your drawing functions using screenX and screenY as your coordinates

您必须确定对缩放和偏移有意义的值。您还可以让您的程序对不同的数据集使用不同的值,这样您就可以在同一屏幕上显示多个图表。但这是一种简单的方法。

还有其他方法可以解决这个问题。 OpenGL具有非常强大的坐标变换函数和矩阵数学能力。当您开发越来越复杂的程序时,这些可能会变得更加有用。如果您要在屏幕上实时移动东西,或者在非常大的数据集上操作,它们是最有用的,因为它们允许您使用图形硬件非常快速地执行这些数学计算(能够比 CPU 快得多)。但是,CPU 执行简单计算(例如您只打算在有限的数据集上执行一次或很少执行的计算)所花费的时间对于当今的计算机来说不是问题。

【讨论】:

非常感谢您的快速回复。我会试试这个。 我基于这个逻辑实现了我的代码。它工作得很好!非常感谢:)

以上是关于使用 glut、opengl 绘制散点图矩阵的主要内容,如果未能解决你的问题,请参考以下文章

R语言绘图:复杂散点图绘制

100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图三维散点图散点图矩阵)

R数据可视化初阶-散点图散点图矩阵相关系数

使用 OpenGL 的散点图:如何设置标记样式

使用 OpenGL 在 C++ 中绘制具有大量数据点的散点图的最佳方法

R语言使用car包的scatterplotMatrix函数绘制散点图矩阵并添加线性和loess拟合线在主对角线上放置箱图密度或直方图在图像边缘添加轴须图rug可以基于分组变量绘制散点图矩阵