Решение с автоответчиком не работает ни в более общем случае, ни фактически преобразует DataPoint
значения в пиксельные координаты .
ВотРешение для рисования круга, который всегда будет работать:
private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
RectangleF ipp = InnerPlotPositionClientRectangle(chart1, chart1.ChartAreas[0]);
using (Graphics g = chart1.CreateGraphics())
g.DrawEllipse(Pens.Red, new RectangleF(ipp.Location, ipp.Size));
}
Используются две вспомогательные функции:
RectangleF ChartAreaClientRectangle(Chart chart, ChartArea CA)
{
RectangleF CAR = CA.Position.ToRectangleF();
float pw = chart.ClientSize.Width / 100f;
float ph = chart.ClientSize.Height / 100f;
return new RectangleF(pw * CAR.X, ph * CAR.Y, pw * CAR.Width, ph * CAR.Height);
}
RectangleF InnerPlotPositionClientRectangle(Chart chart, ChartArea CA)
{
RectangleF IPP = CA.InnerPlotPosition.ToRectangleF();
RectangleF CArp = ChartAreaClientRectangle(chart, CA);
float pw = CArp.Width / 100f;
float ph = CArp.Height / 100f;
return new RectangleF(CArp.X + pw * IPP.X, CArp.Y + ph * IPP.Y,
pw * IPP.Width, ph * IPP.Height);
}
А вот ссылка на общую функцию преобразования координатдля полярных карт .