有没有办法在极坐标图上画一个点

Is there a way to draw a Point on a Polar Chart

我想在环和分段线之间的每个 "crossing" 上添加一个彩色点(红色或绿色)。有没有比制作只有两个数据点的 240 系列更简单的方法?

1 - 无需创建不同的 Series。只需在您想要的位置添加您想要的DataPoints!这是最简单的方法,因为您已经知道这些值。

2 - 作为替代方案,您可以使用 xxxPaint 事件并绘制实心圆圈(或任何您喜欢的...)。为此,您需要将值转换为像素。这可以通常 通过AxisX/AxisY.ValueToPixelPosition 方法实现。 但是 对于 Polar Charts 这将不起作用。相反,您需要自己计算像素坐标。.

第二种方法有点难,但当然可以让您更好地控制绘制点的样式..

这是添加DataPoints的结果:

第一个版本的示例代码;首先我们设置一个极坐标图及其坐标轴属性:

Chart chart = chart2;
chart.Series.Clear();

ChartArea ca = chart.ChartAreas[0];
Axis ax = ca.AxisX;
Axis ay = ca.AxisY;

ax.Minimum  = 0;
ax.Maximum  = 360;
ax.Interval = 15;   // 15° interval
ax.Crossing = 0;    // start the segments at the top!

ay.Minimum  = 0;
ay.Maximum  = 10;
ay.Interval = 1;


Series s0 = chart.Series.Add("points");
s0.MarkerStyle = MarkerStyle.Circle;   
s0.SetCustomProperty("PolarDrawingStyle", "Marker");
s0.MarkerSize = 6; 
s0.MarkerColor = Color.Teal;
s0.ChartType = SeriesChartType.Polar;

然后我们在十字路口添加点,最后设置其中一个点的样式以表明它们都可以不同..:

for (double vx = ax.Minimum; vx < ax.Maximum; vx += ax.Interval)
    for (double vy = ay.Minimum; vy <= ay.Maximum; vy += ay.Interval)
        s0.Points.AddXY(vx, vy);

s0.Points[333].MarkerColor = Color.Red;
s0.Points[333].MarkerSize = 12;

对于计算像素坐标的代码see this post!

使用 link 和这个 PrePaint 事件中的函数:

private void chart2_PrePaint(object sender, ChartPaintEventArgs e)
{
    Chart chart = chart2;
    ChartArea ca = chart.ChartAreas[0];
    Series s0 = chart.Series["points"];

    foreach (DataPoint dp in s0.Points)
    {
        PointF pt = PolarValueToPixelPosition(dp, chart, ca);
        e.ChartGraphics.Graphics.DrawEllipse(Pens.OrangeRed, pt.X - 5, pt.Y - 5, 9, 9);
    }
}

我们可以用圆圈装饰每个点:

或者当然,如果您不想首先添加 DataPoints,您可以通过计算值来替换它们,就像我在添加它们的循环中所做的那样..