C# 使用GDI绘制雷达图的实例
最近项目要用C#实现画一个雷达图,搜了搜网上竟然找不到C#画雷达图的解决方案,那么自己实现一个吧
实现效果如下图:
代码如下:
publicstaticclassRadarDemo { staticfloatmW=1200; staticfloatmH=1200; staticDictionarymData=newDictionary { //{"速度",77}, {"力量",72}, {"防守",110}, {"射门",50}, {"传球",80}, {"耐力",60} };//维度数据 staticfloatmCount=mData.Count;//边数 staticfloatmCenter=mW*0.5f;//中心点 staticfloatmRadius=mCenter-100;//半径(减去的值用于给绘制的文本留空间) staticdoublemAngle=(Math.PI*2)/mCount;//角度 staticGraphicsgraphics=null; staticintmPointRadius=5;//各个维度分值圆点的半径 staticinttextFontSize=18;//顶点文字大小px conststringtextFontFamily="MicrosoftYahei";//顶点字体 staticColorlineColor=Color.Green; staticColorfillColor=Color.FromArgb(128,255,0,0); staticColorfontColor=Color.Black; publicstaticvoidShow() { Bitmapimg=newBitmap((int)mW,(int)mH); graphics=Graphics.FromImage(img); graphics.Clear(Color.White); img.Save($"{AppDomain.CurrentDomain.BaseDirectory}radar/0.png",ImageFormat.Png); DrawPolygon(graphics); img.Save($"{AppDomain.CurrentDomain.BaseDirectory}radar/1.png",ImageFormat.Png); DrawLines(graphics); img.Save($"{AppDomain.CurrentDomain.BaseDirectory}radar/2.png",ImageFormat.Png); DrawText(graphics); img.Save($"{AppDomain.CurrentDomain.BaseDirectory}radar/3.png",ImageFormat.Png); DrawRegion(graphics); img.Save($"{AppDomain.CurrentDomain.BaseDirectory}radar/4.png",ImageFormat.Png); DrawCircle(graphics); img.Save($"{AppDomain.CurrentDomain.BaseDirectory}radar/5.png",ImageFormat.Png); img.Dispose(); graphics.Dispose(); } //绘制多边形边 privatestaticvoidDrawPolygon(Graphicsctx) { varr=mRadius/mCount;//单位半径 Penpen=newPen(lineColor); //画6个圈 for(vari=0;i (); varcurrR=r*(i+1);//当前半径 //画6条边 for(varj=0;j 0&&mAngle*i<=Math.PI/2) { ctx.DrawString(item.Key,font,newSolidBrush(fontColor),x-ctx.MeasureString(item.Key,font).Width*0.5f,y+fontSize/*y+fontSize*/); } elseif(mAngle*i>Math.PI/2&&mAngle*i<=Math.PI) { ctx.DrawString(item.Key,font,newSolidBrush(fontColor),x-ctx.MeasureString(item.Key,font).Width,y/*y+fontSize*/); } elseif(mAngle*i>Math.PI&&mAngle*i<=Math.PI*3/2) { ctx.DrawString(item.Key,font,newSolidBrush(fontColor),x-ctx.MeasureString(item.Key,font).Width,y); } elseif(mAngle*i>Math.PI*3/2) { ctx.DrawString(item.Key,font,newSolidBrush(fontColor),x-ctx.MeasureString(item.Key,font).Width*0.5f,y-fontSize*0.5f); } else { ctx.DrawString(item.Key,font,newSolidBrush(fontColor),x,y/*y+fontSize*/); } i++; } ctx.Save(); } //绘制数据区域 privatestaticvoidDrawRegion(Graphicsctx) { inti=0; List points=newList (); foreach(variteminmData) { varx=(float)(mCenter+mRadius*Math.Cos(mAngle*i)*item.Value/100); vary=(float)(mCenter+mRadius*Math.Sin(mAngle*i)*item.Value/100); points.Add(newPointF{X=x,Y=y}); //ctx.DrawArc(newPen(lineColor),x,y,r,r,0,(float)Math.PI*2); i++; } //GraphicsPathpath=newGraphicsPath(); //path.AddLines(points.ToArray()); ctx.FillPolygon(newSolidBrush(fillColor),points.ToArray()); ctx.Save(); } //画点 privatestaticvoidDrawCircle(Graphicsctx) { //varr=mCenter/18; varr=mPointRadius; inti=0; foreach(variteminmData) { varx=(float)(mCenter+mRadius*Math.Cos(mAngle*i)*item.Value/100); vary=(float)(mCenter+mRadius*Math.Sin(mAngle*i)*item.Value/100); ctx.FillPie(newSolidBrush(fillColor),x-r,y-r,r*2,r*2,0,360); //ctx.DrawArc(newPen(lineColor),x,y,r,r,0,(float)Math.PI*2); i++; } ctx.Save(); } }
把这个类粘贴到你的项目中,执行RadarDemo.Show();就会在你的根目录里生成雷达图了,为了方便理解怎么画出来的,我把画每一个步骤时的图片都保存下来了。可以自行运行查看
总结
以上所述是小编给大家介绍的C#使用GDI绘制雷达图的实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。