在MS图表中添加注释(例如(10,20)(20,39)等)和水平滚动条

时间:2015-07-02 10:03:09

标签: c# winforms charts

我想在MS图表(winforms)中添加文本(例如注释),例如(10,20),(30,40),其中我已经有一个滚动条。

我可以在Chart中绘制字符串(graphics.drawstring),但在滚动水平滚动条时,我绘制的文本仍然是静态的和不可移动的。

在滚动滚动条时,我绘制的文本也应该与水平滚动一起移动。

我的代码如下:

 chart2.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
 chart2.BorderlineColor      = System.Drawing.Color.FromArgb(26, 59, 105);
 chart2.BorderlineWidth = 3;
 chart2.BackColor       = Color.White;

 chart2.ChartAreas.Add("chtArea");
 chart2.ChartAreas[0].AxisX.Title = "Category Name";
 chart2.ChartAreas[0].AxisX.TitleFont = 
        new System.Drawing.Font("Verdana", 11, System.Drawing.FontStyle.Bold);
 chart2.ChartAreas[0].AxisY.Title = "UnitPrice";
 chart2.ChartAreas[0].AxisY.TitleFont = 
        new System.Drawing.Font("Verdana", 11, System.Drawing.FontStyle.Bold);
 chart2.ChartAreas[0].BorderDashStyle = ChartDashStyle.Solid;
 chart2.ChartAreas[0].BorderWidth = 2;

 chart2.ChartAreas["chtArea"].AxisX.ScrollBar.Enabled = true;
 chart2.ChartAreas["chtArea"].CursorX.IsUserEnabled = true;
 chart2.ChartAreas["chtArea"].CursorX.IsUserSelectionEnabled = true;
 chart2.ChartAreas["chtArea"].AxisX.ScaleView.Zoomable = false;
 chart2.ChartAreas["chtArea"].AxisX.ScrollBar.IsPositionedInside = true;
 chart2.ChartAreas["chtArea"].AxisX.ScaleView.Size = 20;
 chart2.ChartAreas[0].AxisX.ScaleView.SmallScrollSizeType = DateTimeIntervalType.Seconds;
 chart2.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = 1;

 chart2.Legends.Add("UnitPrice");
 chart2.Series.Add("UnitPrice");
 chart2.Series[0].ChartType = SeriesChartType.Line;

 Random rand = new Random();
 var valuesArray = Enumerable.Range(0, 500).Select(x => rand.Next(0, 100)).ToArray();

 for (int i = 0; i < 500; i++)
 {                         
      chart2.Series["UnitPrice"].Points.AddXY(i+10, valuesArray[i]);               
 }

我尝试过TextAnnotaions,Line annotations等等。没有什么能帮到我。

然后我尝试在MS图表中绘制动态标签。滚动水平滚动条时,标签保持不动。

此代码也适用于您的计算机。

1 个答案:

答案 0 :(得分:2)

听起来好像要添加TextAnnotations

如果您希望他们坚持您的数据点,您应该将他们固定在他们应该留下的点上。

以下是一些例子:

enter image description here

    // directly anchored to a point
    TextAnnotation TA1 = new TextAnnotation();
    TA1.Text = "DataPoint 222";
    TA1.SetAnchor(chart2.Series["UnitPrice"].Points[222]);
    chart2.Annotations.Add(TA1);

    // anchored to a point but shifted down
    TextAnnotation TA2 = new TextAnnotation();
    TA2.Text = "DataPoint 111";
    TA2.AnchorDataPoint = chart2.Series["UnitPrice"].Points[111];
    TA2.AnchorY = 0;   

    chart2.Annotations.Add(TA2);

    // this one is not anchored on a point:
    TextAnnotation TA3 = new TextAnnotation();
    TA3.Text = "At 50% width BC";
    TA3.AnchorX = 50;  // 50% of chart width
    TA3.AnchorY = 20;  // 20% of chart height, from top!
    TA3.Alignment = ContentAlignment.BottomCenter;  // try a few!

    chart2.Annotations.Add(TA3);

默认情况下,它们会锚定到DataPoints或位于图表大小的%

根据像素坐标设置位置也是可能,但为此,您需要在每次图表更改其视图时计算位置!

See here举例说明如何将图表数据位置转换为图表控件坐标,反之亦然..(不是真的推荐)