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;j0&&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;
Listpoints=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。