如何创建三维散点图?

时间:2011-06-24 14:29:16

标签: c# 3d plot scatter-plot

我一直在用C#对三维散点图进行一些研究。到目前为止,我发现library对我有些影响。但是,不一定像我需要的那样灵活。由于我所需要的只是创建一个固定的三维散点图,是否有其他替代方法可以使用C#中的Point3D结构进行三维绘图,或者不需要我引入第三方库并且可能允许的任何其他替代方案为了更好的灵活性?

2 个答案:

答案 0 :(得分:3)

我设法使用ILNumerics创建了一个三维散点图:

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渲染器是工作,表现不是很惊人。

答案 1 :(得分:1)

假设您不需要在C#应用程序中显示该图,我建议您使用HypnoLog(一种我正在使用的开源工具),它将在Web浏览器中显示该图作为输出日志。

在另一个答案中提出的优于ILNumerics库的优势是:

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

HypnoLog目前没有内置的3d散点图可视化器,但是您可以轻松create your own visualizer。我可以建议使用plotly 3D Scatter Plots。 HypnoLog将帮助您将数据从C#应用程序发送到在浏览器中创建的可视化器。有关在C#中轻松使用HypnoLog的信息,请参见HypnoLog-CSharp库。