我想绘制一个图表,显示每个位置出现的字节值频率。
//位置[32] [结果[255] [频率[int]
Dictionary<UInt16, Dictionary<UInt16, int>>
//我要画这个
答案 0 :(得分:0)
MSChart在这方面不是很好。
但是,如果您的某个尺寸只能使用几个不同的值,则可以使用其3D选项并为每个z值添加一个系列。
我假设您只有32个位置,并选择此尺寸作为z轴。
MSChart实际上没有z轴属性;但是如果ChartArea
包含3D,则Series
将用作第3维。所以我添加了32系列。.
然后我循环遍历256个值,并或多或少地随机创建一个频率值。
以下是上述结果的代码:
private void button1_Click(object sender, EventArgs e)
{
chart1.Series.Clear();
SeriesChartType type = SeriesChartType.Point;
Random rnd = new Random(1);
ChartArea ca = chart1.ChartAreas[0];
ca.Area3DStyle.Enable3D = true;
ca.Area3DStyle.PointGapDepth = 500;
ca.Area3DStyle.PointDepth = 500;
for (int p = 0; p < 32; p++)
{
Series s = chart1.Series.Add("P" + p);
s.ChartType = type;
for (int v = 0; v < 256; v++)
{
// test data
int f = 25+(int)(rnd.Next(5) + 10*Math.Sin((p * (256 - v )/ 100f)));
s.Points.AddXY(v, f);
}
}
}
要旋转,我对所有按钮都使用了该通用单击事件:
private void btn_rotate_Click(object sender, EventArgs e)
{
int step = 10;
ChartArea ca = chart1.ChartAreas[0];
if (sender == btn_reset) { ca.Area3DStyle.Rotation = 30; ca.Area3DStyle.Inclination = 30; }
if (sender == btn_left && ca.Area3DStyle.Rotation < 180-step) ca.Area3DStyle.Rotation+= step;
if (sender == btn_right && ca.Area3DStyle.Rotation > -180-step) ca.Area3DStyle.Rotation-= step;
if (sender == btn_down && ca.Area3DStyle.Inclination < 90-step) ca.Area3DStyle.Inclination+= step;
if (sender == btn_up && ca.Area3DStyle.Inclination > -90-step) ca.Area3DStyle.Inclination-= step;
}