C# 寻找绘制科学数据的框架:2d/3d

C# 寻找绘制科学数据的框架:2d/3d,c#,math,charts,bitmap,C#,Math,Charts,Bitmap,我需要想象一些科学计算。如果已经有好的可用代码,我通常更喜欢重用代码,而不是每次都发明轮子,这就是我提出这个问题的原因。我需要一个C#代码来绘制2d(y=f(x))和3d(z=f(x,y))数字数据集(其中任何轴都可以是float、int或datetime)的图表(只需输出位图就可以了),有时组合在一起 如果我去点击左侧导航栏中的3D,我可以看到我需要的东西。但最便宜的版本在那里售价759美元,对于一个东欧学生的爱好项目来说看起来很可怕:-(是免费的,功能非常强大。Microsoft购买了Dun

我需要想象一些科学计算。如果已经有好的可用代码,我通常更喜欢重用代码,而不是每次都发明轮子,这就是我提出这个问题的原因。我需要一个C#代码来绘制2d
(y=f(x))
和3d
(z=f(x,y))
数字数据集(其中任何轴都可以是float、int或datetime)的图表(只需输出位图就可以了),有时组合在一起


如果我去点击左侧导航栏中的3D,我可以看到我需要的东西。但最便宜的版本在那里售价759美元,对于一个东欧学生的爱好项目来说看起来很可怕:-(

是免费的,功能非常强大。Microsoft购买了Dundas图表控件的权限并重新打包。它简单吗?不,它是一个功能非常强大的控件。但是Microsoft也有很好的文档和文档。示例使它看起来只是条形图/饼图/etc类型的图表,但它也可以处理面向数学的图表。

很快,f功能丰富且易于使用。这是我最喜欢的图表控件。

plplot软件包可以满足您的需要。更多详细信息如下:

您可以在上从C#连接到

有很多图形示例,您可以将其转换为C#来做您想做的事情。

非常容易学习(不幸的是,当前版本似乎不是免费的)。它将数学引擎与可视化功能(提供Windows窗体控件)结合在一起。下面是一个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 };
var颜色
=新[]{Color.Red,Color.Black,Color.Blue,Color.Green/*…*/};
iArray数据=ILMath.zeros(
3.
颜色、长度);
ILArray colorData=ILMath.zeros(
3.
颜色、长度);
int指数=0;
foreach(颜色中的var p)
{
数据[0,索引]=p.GetHue();
数据[1,索引]=p.GetSaturation();
数据[2,索引]=p.GetBrightness();
colorData[0,索引]=p.R/255.0f;
colorData[1,索引]=p.G/255.0f;
颜色数据[2,索引]=p.B/255.0f;
索引++;
}
变量点=新的ILPoints()
{
位置=数据,
颜色=颜色数据
};
点。颜色=空;
变量绘图=新ILPlotCube(twoDMode:false)
{
旋转=矩阵4.旋转(新矢量3(1,1,0.1f),0.4f),
投影=投影。正交,
子项={points}
};
plot.Axes[0].Label.Text=“色调”;
plot.Axes[1].Label.Text=“饱和度”;
plot.Axes[2].Label.Text=“亮度”;
this.ilPanel1.Scene=新的ILScene{plot};
开源工具:


然而,代码是C。

功能丰富和KISS?你意识到这些基本上是完全相反的吗?Matthew,我很确定你在这方面是错的。这是一个架构问题,在编码之前进行了良好的概念设计。如果开发出清晰有效的结构设计,一个功能丰富且通常庞大的系统可能非常KISS在整个代码中都进行了编辑和流式处理。只需从C#中转储数据,然后使用渐近线语言渲染美丽的2D/3D图形。我是串行的!谢谢。是的,我被示例分散了注意力,我不知道它们适合于科学制图。但据我所知,库的目标是.Net 3.5和VS 2008。我使用的是.Net 4和VS 2010。无论如何都会尝试。谢谢。在这种情况下,图表控件包含在.NET 4中。打开VS2010中的工具箱,您将在数据部分看到它。ZedGraph仅为2D(y=f(x))。并且不够简单,无法快速扩展到绘制3d(z=f(x,y))数据。我肯定需要绘制真实3d(z=f(x,y))Ilnumeric似乎是一个商业产品,对吧?它的价格是多少?@user1234440肯定我没有付钱。所以要么是之前有一个免费版本,要么是我使用过试用版——老实说我不记得了。谢谢通知——我会更新答案。我是C#的新手,这个库非常棒,但我看到所有人都在使用它当然,如果它需要付费或其他什么的话。我可以通过nuget获得并使用它。我在上为PLplot创建了.Net绑定