带状线标签

时间:2018-07-09 08:41:15

标签: c# charts

当前,我一直在Windows窗体上的图形上做一个项目。现在我有话要问。 是否有办法将Stripeline标签从图表中移出,而不在图表中移至类似What I expect it to be的位置,并且使我的Stripeline着色器太厚了?

till date what i do What I expect it to be

如果有需要,这是我的带状线代码

StripLine stripLine1 = new StripLine();
        stripLine1.StripWidth = 0.01;
        stripLine1.BorderColor = System.Drawing.Color.Blue;
        stripLine1.BorderWidth = 0;
        stripLine1.BorderDashStyle = ChartDashStyle.Solid;
        stripLine1.IntervalOffset = Convert.ToDouble(textBox7.Text);
        stripLine1.BackColor = System.Drawing.Color.Blue;
        stripLine1.Text = "x̅";
        chart1.ChartAreas[0].AxisY.StripLines.Add(stripLine1);

1 个答案:

答案 0 :(得分:0)

否,StripLines仅绘制在其ChartArea内。

至少有两个选择:

  • 您可以通过编码Text事件来在其外部显示其PaintXXX

private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
    ChartArea ca = chart1.ChartAreas[0];
    Axis ax = ca.AxisX;
    Axis ay = ca.AxisY;
    Graphics g = e.ChartGraphics.Graphics;
    foreach (StripLine sl in ay.StripLines)
    {
        double v = (sl.Interval != double.NaN ? sl.Interval : 0)  + sl.IntervalOffset;

        TextRenderer.DrawText(g, sl.Text, sl.Font, new Point(
            (int)ax.ValueToPixelPosition(ax.Maximum),
            (int)ay.ValueToPixelPosition(v)),Color.Black);
    }
}

微调位置,也许要靠尊重TextAlignment属性由您决定。

请注意,这将现在显示两次文本;一种使原始标签透明的简单解决方案:

   YourStripLine.ForeColor = Color.Transparent;

enter image description here

还请注意,如果对图表进行序列化,则不会导出绘制的图形。


  • 一种替代方法是设置辅助y轴,并将标签添加为CustomLabels。再三考虑,我认为这是可取的,至少在不需要次要y轴的情况下。

我在这里只做一条带状线:

Axis ay2 = chart1.ChartAreas[0].AxisY2;
ay2.Enabled = AxisEnabled.True;
ay2.LineColor = Color.Transparent;
CustomLabel cl = new CustomLabel();
cl.Text = stripLine.Text;
double v = (stripLine.Interval != double.NaN ? stripLine.Interval : 0)  
            + stripLine.IntervalOffset;
cl.FromPosition = v - 0.001;
cl.ToPosition = v + 0.001;
ay2.CustomLabels.Add(cl);

您在这里还希望使原始文本透明。

enter image description here