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

Display circle in chart with radius in chart units C#

总结:我已经尝试过诸如气泡点之类的东西和乱用标记大小,但都不能在实际的网格单位中设置半径。气泡图=% 和标记=点(忽略网格)

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

-----旧----- 我查看了如何更改气泡图中气泡的大小,显然第二个 Y 值应该控制大小......除了它什么都不做。

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

唯一能够改变大小的是最小和最大大小值...但我无法用它来准确控制大小(更不用说那会很愚蠢)。

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

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

I need a circle that has a radius in grid units

MSChart中有3种坐标系:

  • 数据
  • 某些区域的
  • 百分比,最显着的是 ChartAreaInnerPlotPosition
  • Chart 控件的
  • Pixels 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 );
}

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

请注意,这不是一个完美的圆,因为坐标轴的刻度不同。当然,可以很容易地选择两个值的最大值或最小值。

我围绕特定点画圆。位置和大小将随图表本身移动和缩放。

要在另一个位置绘制,只需计算它,例如就像我已经做的那样来自价值观..