如何创建三维散点图

本文关键字:三维 散点图 创建 何创建 | 更新日期: 2023-09-27 18:00:10

我一直在用C#做一些关于三维散点图的研究。到目前为止,我已经找到了一个对我有用的库。然而,它不一定像我需要的那样灵活。由于我所需要的只是创建一个固定的三维散点图,除了使用C#中的Point3D结构进行三维绘制之外,还有其他替代方案吗?或者其他不需要我引入第三方库的替代方案吗,这可能会带来更好的灵活性?

如何创建三维散点图

我已经用ILNumerics:创建了一个3D散点图

var colors
  = new[] { Color.Red, Color.Black, Color.Blue, Color.Green /*...*/ };
ILArray<float> data = ILMath.zeros<float>(
  3,
  colors.Length);
ILArray<float> colorData = ILMath.zeros<float>(
  3,
  colors.Length);
int index = 0;
foreach (var p in colors)
{
  data[0, index] = p.GetHue();
  data[1, index] = p.GetSaturation();
  data[2, index] = p.GetBrightness();
  colorData [0, index] = p.R / 255.0f;
  colorData [1, index] = p.G / 255.0f;
  colorData [2, index] = p.B / 255.0f;
  index++;
}
var points = new ILPoints()
{
  Positions = data,
  Colors = colorData 
};
points.Color = null;
var plot = new ILPlotCube(twoDMode: false)
{
  Rotation = Matrix4.Rotation(new Vector3(1, 1, 0.1f), 0.4f),
  Projection = Projection.Orthographic,
  Children = { points }
};
plot.Axes[0].Label.Text = "Hue";
plot.Axes[1].Label.Text = "Saturation";
plot.Axes[2].Label.Text = "Brightness";
this.ilPanel1.Scene = new ILScene { plot };

很容易学习和使用,但我的显卡有一些严重的问题(它是英特尔®;处理器图形2000,所以我不怪他们…)-只有GDI渲染器在工作,性能不是很惊人。

假设您不需要在C#应用程序中显示绘图,我可以建议使用HypnoLog,这是我一直在开发的一个开源工具,它将在web浏览器中显示绘图作为输出日志。

与另一个答案中提出的ILNumerics库相比,其优势在于:

  • 它是开源的,可以免费使用
  • 您可以完全灵活地为浏览器选择任何打印库
  • 您可以在代码中继续使用自己的数据结构(如Point3D

HypnoLog中目前没有内置的三维散点图可视化工具,但您可以轻松创建自己的可视化工具。我可以建议使用plotly三维散点图。HypnoLog将帮助您将数据从C#应用程序发送到您在浏览器中创建的可视化工具。请参阅HypnoLog CSharp库,了解如何在C#中轻松使用HypnoLog。