以图表单位C#显示半径的图表

时间:2015-08-24 12:49:44

标签: c# winforms charts size

总结:我尝试过像泡泡点这样的东西,并用标记大小弄乱,但两者都不能在实际网格单位中设置半径。气泡图=%和标记=点(忽略网格)

如何在半径为网格单位的图表中添加圆圈?!

-----老----- 我已经查找了如何在气泡图中更改气泡的大小,显然第二个Y值应该控制大小...除了它绝对没有。

我无法使用标记大小作为解决方法,因为大小需要以正确的单位而不是像素。

唯一设法改变大小的是最小和最大尺寸值...但我无法准确控制尺寸(更不用说那将是非常愚蠢的)。

没有代码,因为没有特殊的代码或设置,应该很容易复制。

编辑: 刚刚意识到气泡尺寸是基于其他气泡尺寸而不是网格。这是一个很大的问题,因为我需要一个半径为网格单位的圆。它也需要独处。

1 个答案:

答案 0 :(得分:1)

  

我需要一个半径为网格单位的圆圈

MSChart中有3个坐标系:

  • 数据
  • 某些区域的
  • 百分比,最值得注意的是ChartAreaInnerPlotPosition
  • 图表控件ClientArea
  • 像素

我假设网格单位表示数据值,它们也用于显示网格线和刻度线。

要创建圆形或其​​他形状,您可以添加PolygonAnnotation,其中GraphicsPath包含椭圆,或只是EllipseAnnotation

或者你可以画出这个圈子。以下是绘制方法:

private void chart_PrePaint(object sender, ChartPaintEventArgs e)
{
    ChartArea ca = chart.ChartAreas[0];
    Axis ax = ca.AxisX;
    Axis ay = ca.AxisY;
    Series s = chart.Series[0];

    DataPoint dpCenter = s.Points[22];

    dpCenter.MarkerStyle = MarkerStyle.Circle;

    double xVal = dpCenter.XValue;
    double yVal = dpCenter.YValues[0];

    double rad = 2;  // <<<<<= radius in values

    float xRad = (float)(ax.ValueToPixelPosition(0) - ax.ValueToPixelPosition(rad));
    float yRad = (float)(ay.ValueToPixelPosition(0) - ay.ValueToPixelPosition(rad));

    float xc = (float)ax.ValueToPixelPosition(xVal);
    float yc = (float)ay.ValueToPixelPosition(yVal);

    Rectangle r = Rectangle.Round(new RectangleF(xc - xRad, yc - yRad, 
        xRad * 2, yRad * 2));

    e.ChartGraphics.Graphics.DrawEllipse(Pens.Red, r );
}

enter image description here

大小以数据值单位给出。要绘制形状,我们需要转换为像素;为此,有轴功能。

请注意,它不是一个完美的圆,因为轴没有相同的比例。当然,人们可以很容易地选择两个值的最大值或最小值。

我在特定点周围绘制圆圈。位置和大小将随图表本身移动和缩放。

要在另一个位置绘制,只需计算它,例如从我已经做过的价值观来看......