默认情况下,极坐标图中的角度沿顺时针方向从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对象-我没有这样做。
您知道为什么更改没有效果吗?
谢谢!
答案 0 :(得分:1)
如果您想要这样的东西:..
.. 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
事件中添加任何修改内容!它们可能经常被调用,这些事件实际上仅是为了绘制。 ((有时用于测量))