MSchart极坐标图自定义标签不起作用

时间:2018-09-05 14:08:20

标签: c# mschart

默认情况下,极坐标图中的角度沿顺时针方向从0变为360,但我希望它们逆时针(逆时针)

chart.ChartAreas[0].AxisX.Title = "Elevation";
chart.ChartAreas[0].AxisY.Title = "Power(dBm)";
chart.ChartAreas[0].BackColor = System.Drawing.Color.FromArgb(211, 223, 240);
chart.ChartAreas[0].BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
chart.ChartAreas[0].AxisY.IsStartedFromZero = false;
chart.PrePaint += new EventHandler<ChartPaintEventArgs>(chart_prePaint);

我尝试根据我发现的一些示例代码来更改标签:

CustomLabelsCollection labels = chart.ChartAreas[0].AxisX.CustomLabels;

if (labels == null) return;

for (int i = 0; i < labels.Count - 1; i++)
{
    if (labels[0].Text == "360") break;
    labels[i].Text = (360 - int.Parse(labels[i].Text)).ToString();
    labels[i].ToolTip = "Angle in Degrees";
}

代码将更改对象中的标签,但不会更改图形上的标签。每次触发该事件时,我们回到该事件处理程序中,都会将标签重置为原来的方式,并且工具提示也会重置。

为了增加混乱,我不确定为什么首先要填充CustomLabels对象-我没有这样做。

您知道为什么更改没有效果吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想要这样的东西:..

enter image description here

.. CustomLabels确实是实现它的一种方法。我找不到使轴反转的方法。

这是我使用的C#代码:

Axis ay = chart.ChartAreas[0].AxisY;
ay.LabelStyle.Enabled = false;

Axis ax = chart.ChartAreas[0].AxisX;
ax.CustomLabels.Clear();

int  step = (int)ax.Interval;
if (step == 0) step = 30;

for (int i = 0; i < 360; i+=step)
{
    int a = 360 - i;             // the angle to target
    var cl = new CustomLabel();
    cl.Text = a + "°";
    cl.FromPosition = a + 0.01;  // create a small..
    cl.ToPosition = a - 0.01;    // ..space to place the label !
    ax.CustomLabels.Add(cl);
}

请注意,只有Labels是反转的,不是

要从0开始,只需将循环条件更改为<=并在创建标签之前检查i>0

如果您未设置Interval,则使用默认间隔30;根据需要进行更改!


CustomLabels默认情况下是创建的集合,因此不是null,而是Count==0) 。如果您未创建任何内容,那么将不会显示任何内容,并且会显示原始的AxisLabels。 (仅显示一种类型!)

除非您有充分的理由(例如动态数据),否则不应在xxxPaint事件中添加任何修改内容!它们可能经常被调用,这些事件实际上仅是为了绘制。 ((有时用于测量))