.NET饼图:如何向切片添加文本和旋转图表

时间:2009-06-22 23:28:21

标签: c# graphics charts rotation pie-chart

下面的代码创建了一个24切片饼图。我如何:

  1. 为每个切片添加文本标签“财富之轮”。
  2. 旋转饼图?我希望它像“财富之轮”一样旋转。

    private void DrawPieChart()
    {
        Graphics g = this.CreateGraphics();
        g.Clear(this.BackColor);
        Rectangle rect = new Rectangle(0, 0, 300, 300);
        float angle = 0;
        Random random = new Random();
        int sectors = 24;
        int sweep = 360 / sectors;
    
         for(int i=0; i<24;i++)
        {
            Color clr = Color.FromArgb(random.Next(0, 255),random.Next(0, 255), random.Next(0, 255));
            g.FillPie(new SolidBrush(clr), rect, angle, sweep);
            angle += sweep;
        }
        g.Dispose();
    }
    

1 个答案:

答案 0 :(得分:2)

要添加文字标签,请致电g.DrawString

编辑:要像文字一样制作文字,请将图形对象旋转到angle + sweep / 2,然后绘制文字。为了使它向下绘制,yopu可能能够以较小的宽度绘制它并依靠字符包裹;如果这不起作用,请绘制字符vy chaaracter并使用g.MeasureString找出放置下一个字符的位置。

要旋转整个图表,请在绘制之前以度数角度调用g.RotateTransform编辑:像这样:

    private void DrawPieChart()
    {
        Graphics g = this.CreateGraphics();
        g.Clear(this.BackColor);
        Rectangle rect = new Rectangle(0, 0, 300, 300);
        float angle = 0;
        Random random = new Random();
        int sectors = 24;
        int sweep = 360 / sectors;

         g.RotateTransform(90);        //Rotates by 90 degrees
         for(int i=0; i<24;i++)
        {
            Color clr = Color.FromArgb(random.Next(0, 255),random.Next(0, 255), random.Next(0, 255));
            g.FillPie(new SolidBrush(clr), rect, angle, sweep);
            angle += sweep;
        }
        g.Dispose();
    }

为旋转设置动画,为角度创建一个字段,在计时器上递增,然后将字段传递给g.RotateTransform

另外,绘制内容的正确方法是处理控件的Paint事件,并使用e.Graphics进行绘制。然后,当您想重绘它时,请致电Invalidate。要防止闪烁,请在构造函数中调用this.SetStyle(ControlStyles.DoubleBuffer, true);