C#-如何绘制具有3个变量的图表(位置[32],字节值[255],频率[int])

时间:2018-08-18 04:45:55

标签: c# graph charts frequency

我想绘制一个图表,显示每个位置出现的字节值频率。

//位置[32] [结果[255] [频率[int]

Dictionary<UInt16, Dictionary<UInt16, int>> //我要画这个

1 个答案:

答案 0 :(得分:0)

enter image description here

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;
}