4

我一直在用 C# 对 3d 散点图进行一些研究。到目前为止,我找到了一个对我有用的。但是,不一定像我需要的那样灵活。由于我只需要创建一个固定的 3D 散点图,是否有其他替代方法可以使用Point3DC# 中的结构或任何其他替代方法来替代 3d 绘图,这些替代方法不需要我引入 3rd 方库并且可能允许更好的灵活性?

4

2 回答 2

3

我设法用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 };

很容易学习和使用,但是我的显卡有一些严重的问题(它是Intel® Processor Graphics 2000,所以我不怪他们......) - 只有 GDI 渲染器在工作,性能不是很惊人。

于 2013-09-23T12:26:03.350 回答
1

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

ILNumerics与其他答案中建议的库相比的优点是:

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

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

于 2018-11-05T11:49:40.227 回答