统计图怎么在C#.net中怎么做? 有什么控件,自带的有没有的,要用程序画的话怎么画 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对了我想把统计图放在一个panl容器中显示的 int xLength = _addTime.Length;//横坐标的个数int xSplit = 40;//每个坐标的间隔 //左右个保留的宽度int xLeft = 80;int xRight = 50; //上下个 保留高度 int xTop = 50; int xHeight = 240;//X图实际的高度 int xBottom = 20; int timeHeight = 30;//时间区高度 int rTop = 20;//R图的 int rHeight = 100; int rBottom = 20; int imgWidth = xLength * xSplit;//实际做图的宽度 //画布大小 int picWidth = imgWidth + xLeft + xRight;//画布的宽度 int picHeight = xTop + xHeight + xBottom + timeHeight + rTop + rHeight + rBottom;//画布的高度 //USL 与 LSL 固定下来 为 int imgUSL = xTop;//USL的实际坐标 int imgLSL = xTop + xHeight;//LSL的实际坐标 int imgUCL = Convert.ToInt32(FormatY(_UCL.ToString(), _USL, _LSL, imgUSL, imgLSL));//UCL的实际坐标 Bitmap image = new Bitmap(picWidth, picHeight);//创建一张图片 Graphics g = Graphics.FromImage(image); try { //清空图片背景色 g.Clear(Color.White); Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular); Font fontPoint = new System.Drawing.Font("Arial", 8, FontStyle.Regular);//点的数据 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true);//画布大小 //区域填充颜色 g.FillRectangle(Brushes.AliceBlue, 0, 0, picWidth, picHeight);//画布区域 StringFormat formatR = new StringFormat(); formatR.LineAlignment = StringAlignment.Center;//中心位置 formatR.FormatFlags = StringFormatFlags.DirectionRightToLeft;//左右 StringFormat formatL = new StringFormat(); formatL.LineAlignment = StringAlignment.Center;//中心位置 //USL g.FillRectangle(Brushes.Black, xLeft, imgUSL - 1, imgWidth, 1); //画出USL 如果为2 的话比较粗了 g.DrawString(_USL.ToString(), font, Brushes.Black, xLeft, imgUSL, formatR); //数字 g.DrawString("USL", font, Brushes.Black, imgWidth + xLeft + 10, imgUSL, formatL); //USL //x轴 时间点 int pX = xLeft + Convert.ToInt32(xSplit * 0.5) - 10;// 中心位置 并且便宜 10 int imgTimeHeigth = xTop + xHeight + xBottom; for (int i = 0; i < _addTime.Length; i++) { g.DrawString(_addTime[i].ToString(), font, Brushes.Black, pX, imgTimeHeigth); //设置文字内容及输出位置 中心位置 pX += xSplit; } //显示折线效果 Font font3 = new System.Drawing.Font("Arial", 10, FontStyle.Bold); SolidBrush mybrush = new SolidBrush(Color.Black); Point[] pointsX = new Point[xLength];//多少个点的 int intTempX = xLeft + Convert.ToInt32(xSplit * 0.5);// 中心位置 StringFormat formatPoint = new StringFormat();//X图数字的输出格式 formatPoint.Alignment = StringAlignment.Far; formatPoint.FormatFlags = StringFormatFlags.DirectionVertical; for (int i = 0; i < _douX.Length; i++) { pointsX[i].X = intTempX; pointsX[i].Y = Convert.ToInt32(FormatY(_douX[i].ToString(), _USL, _LSL, imgUSL, imgLSL)); intTempX = intTempX + xSplit; //绘制数字 g.DrawString(_douX[i].ToString(), fontPoint, Brushes.Black, pointsX[i].X, pointsX[i].Y, formatPoint); g.FillEllipse(Brushes.DarkBlue, pointsX[i].X - 2, pointsX[i].Y - 2, 5, 5); } Pen mypen = new Pen(brush, 1); g.DrawLines(mypen, pointsX); //绘制折线 //------------------------end X图的---------------------- //------------------------start R 图的--------------------------------- int imgRUCL = xTop + xHeight + xBottom + timeHeight + rTop; int imgRLCL = xTop + xHeight + xBottom + timeHeight + rTop + rHeight; int imgRCL = Convert.ToInt32(FormatY(_RCL.ToString(), _RUCL, _RLCL, imgRUCL, imgRLCL));//RCL的实际坐标 int imgRU3 = Convert.ToInt32(Format3(_RUCL, _RCL, _RUCL, _RLCL, imgRUCL, imgRLCL));//上三等份 的高度 int imgRL3 = Convert.ToInt32(Format3(_RCL, _RLCL, _RUCL, _RLCL, imgRUCL, imgRLCL));//下三等份 的高度 //RUCL g.FillRectangle(Brushes.MistyRose, xLeft, imgRUCL, imgWidth, imgRU3); //画出USL 上粉色 g.DrawString(_RUCL.ToString(), font, Brushes.Black, xLeft, imgRUCL, formatR); //设置文字内容及输出位置 g.DrawString("UCL", font, Brushes.Black, imgWidth + xLeft + 10, imgRUCL, formatL); //设置文字内容及输出位置 g.FillRectangle(Brushes.LightYellow, xLeft, imgRUCL + imgRU3, imgWidth, imgRU3); //上黄 g.FillRectangle(Brushes.LightCyan, xLeft, imgRCL - imgRU3, imgWidth, imgRU3); //上绿 //RCL g.FillRectangle(Brushes.Black, xLeft, imgRCL, imgWidth, 1); //画出UCL 画的区域高度为 2 g.FillRectangle(Brushes.LightCyan, xLeft, imgRCL + 1, imgWidth, imgRL3); //下绿 g.DrawString(_RCL.ToString(), font, Brushes.Black, xLeft, imgRCL, formatR); //设置文字内容及输出位置 g.DrawString("CL", font, Brushes.Black, imgWidth + xLeft + 10, imgRCL, formatL); //设置文字内容及输出位置 g.FillRectangle(Brushes.LightYellow, xLeft, imgRCL + imgRL3, imgWidth, imgRL3); //下黄 //RLCL g.FillRectangle(Brushes.MistyRose, xLeft, imgRLCL - imgRL3, imgWidth, imgRL3); //下粉色 g.DrawString(_RLCL.ToString(), font, Brushes.Black, xLeft, imgRLCL, formatR); //设置文字内容及输出位置 g.DrawString("LCL", font, Brushes.Black, imgWidth + xLeft + 10, imgRLCL, formatL); //设置文字内容及输出位置 //显示折线效果 Font _RFont = new System.Drawing.Font("Arial", 8, FontStyle.Regular); SolidBrush _RMybrush = new SolidBrush(Color.Black); Point[] _RPoints = new Point[xLength];//多少个点的 int intRTempX = xLeft + Convert.ToInt32(xSplit * 0.5);// 中心位置 StringFormat _RFormat = new StringFormat();//X图数字的输出格式 _RFormat.Alignment = StringAlignment.Near;//下方 _RFormat.FormatFlags = StringFormatFlags.DirectionVertical;//方向垂直 for (int i = 0; i < _douR.Length; i++) { _RPoints[i].X = intRTempX;//横坐标 _RPoints[i].Y = Convert.ToInt32(FormatY(_douR[i].ToString(), _RUCL, _RLCL, imgRUCL, imgRLCL));//纵坐标 intRTempX = intRTempX + xSplit; //绘制数字 g.DrawString(_douR[i].ToString(), _RFont, Brushes.LightSeaGreen, _RPoints[i].X, _RPoints[i].Y, _RFormat); g.FillEllipse(Brushes.LightSeaGreen, _RPoints[i].X - 2, _RPoints[i].Y - 2, 5, 5); } LinearGradientBrush brush2 = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.LightSeaGreen, Color.LightSeaGreen, 1.2f, true);//画布大小 Pen _Rmypen = new Pen(brush2, 1); g.DrawLines(_Rmypen, _RPoints); //绘制折线 //------------------------end R 图的--------------------------------- try { string strImg = DateTime.Now.ToString().Replace("-", "").Replace(" ", "").Replace(":", "") + "CharXR.gif"; //删除该文件夹中的所有 图片 image.Save(Server.MapPath("rpChart//" + strImg)); sb.Append(strImg + "#");//图片名称 for (int i = 0; i < _dataId.Length; i++) { //数据的ID 以及X图的坐标 sb.Append("¥" + _dataId[i] + "@" + pointsX[i].X + "@" + pointsX[i].Y + ""); //R图热点 sb.Append("¥" + _dataId[i] + "@" + _RPoints[i].X + "@" + _RPoints[i].Y + ""); } } catch { } return sb.ToString().Trim('¥');//返回数据 } finally { g.Dispose(); image.Dispose(); } } 参考一下,网上N多,就不知道百度一下?http://www.cnblogs.com/Terrylee/archive/2006/03/04/252178.html 用chart类工具做,自己画太崩溃了 c#服务器使用TcpClient像安卓客户端发送消息,客户端用readUTF读取不到的问题 Castle 多表查询(一对多) Repeater删除记录 請教一個正則表達式的寫法 请问定时搜索怎么做? 奇怪,我的MouseDown事件没用了?? .NET Framework 中的 Generic 还真是这么回事, 为何不能把stack中的数据以arraylist弹出并附值一arraylist 变量.(我stack中压入的是arraylist)( 如何利用一个语句触发toolbar的第一个按钮的click事件? 请问高手,如何获取系统路径?? C#中透明窗体 关于类型系统:值类型,引用类型!
int xSplit = 40;//每个坐标的间隔 //左右个保留的宽度
int xLeft = 80;
int xRight = 50; //上下个 保留高度
int xTop = 50;
int xHeight = 240;//X图实际的高度
int xBottom = 20; int timeHeight = 30;//时间区高度
int rTop = 20;//R图的
int rHeight = 100;
int rBottom = 20;
int imgWidth = xLength * xSplit;//实际做图的宽度
//画布大小
int picWidth = imgWidth + xLeft + xRight;//画布的宽度
int picHeight = xTop + xHeight + xBottom + timeHeight + rTop + rHeight + rBottom;//画布的高度
//USL 与 LSL 固定下来 为
int imgUSL = xTop;//USL的实际坐标
int imgLSL = xTop + xHeight;//LSL的实际坐标 int imgUCL = Convert.ToInt32(FormatY(_UCL.ToString(), _USL, _LSL, imgUSL, imgLSL));//UCL的实际坐标
Bitmap image = new Bitmap(picWidth, picHeight);//创建一张图片 Graphics g = Graphics.FromImage(image); try
{
//清空图片背景色
g.Clear(Color.White); Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular); Font fontPoint = new System.Drawing.Font("Arial", 8, FontStyle.Regular);//点的数据 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true);//画布大小
//区域填充颜色
g.FillRectangle(Brushes.AliceBlue, 0, 0, picWidth, picHeight);//画布区域 StringFormat formatR = new StringFormat(); formatR.LineAlignment = StringAlignment.Center;//中心位置 formatR.FormatFlags = StringFormatFlags.DirectionRightToLeft;//左右 StringFormat formatL = new StringFormat(); formatL.LineAlignment = StringAlignment.Center;//中心位置
//USL
g.FillRectangle(Brushes.Black, xLeft, imgUSL - 1, imgWidth, 1); //画出USL 如果为2 的话比较粗了 g.DrawString(_USL.ToString(), font, Brushes.Black, xLeft, imgUSL, formatR); //数字 g.DrawString("USL", font, Brushes.Black, imgWidth + xLeft + 10, imgUSL, formatL); //USL
//x轴 时间点
int pX = xLeft + Convert.ToInt32(xSplit * 0.5) - 10;// 中心位置 并且便宜 10 int imgTimeHeigth = xTop + xHeight + xBottom; for (int i = 0; i < _addTime.Length; i++)
{
g.DrawString(_addTime[i].ToString(), font, Brushes.Black, pX, imgTimeHeigth); //设置文字内容及输出位置 中心位置 pX += xSplit;
} //显示折线效果
Font font3 = new System.Drawing.Font("Arial", 10, FontStyle.Bold); SolidBrush mybrush = new SolidBrush(Color.Black); Point[] pointsX = new Point[xLength];//多少个点的 int intTempX = xLeft + Convert.ToInt32(xSplit * 0.5);// 中心位置 StringFormat formatPoint = new StringFormat();//X图数字的输出格式 formatPoint.Alignment = StringAlignment.Far; formatPoint.FormatFlags = StringFormatFlags.DirectionVertical; for (int i = 0; i < _douX.Length; i++)
{ pointsX[i].X = intTempX; pointsX[i].Y = Convert.ToInt32(FormatY(_douX[i].ToString(), _USL, _LSL, imgUSL, imgLSL)); intTempX = intTempX + xSplit; //绘制数字
g.DrawString(_douX[i].ToString(), fontPoint, Brushes.Black, pointsX[i].X, pointsX[i].Y, formatPoint); g.FillEllipse(Brushes.DarkBlue, pointsX[i].X - 2, pointsX[i].Y - 2, 5, 5); }
Pen mypen = new Pen(brush, 1);
g.DrawLines(mypen, pointsX); //绘制折线
//------------------------end X图的---------------------- //------------------------start R 图的--------------------------------- int imgRUCL = xTop + xHeight + xBottom + timeHeight + rTop;
int imgRLCL = xTop + xHeight + xBottom + timeHeight + rTop + rHeight;
int imgRCL = Convert.ToInt32(FormatY(_RCL.ToString(), _RUCL, _RLCL, imgRUCL, imgRLCL));//RCL的实际坐标 int imgRU3 = Convert.ToInt32(Format3(_RUCL, _RCL, _RUCL, _RLCL, imgRUCL, imgRLCL));//上三等份 的高度 int imgRL3 = Convert.ToInt32(Format3(_RCL, _RLCL, _RUCL, _RLCL, imgRUCL, imgRLCL));//下三等份 的高度 //RUCL
g.FillRectangle(Brushes.MistyRose, xLeft, imgRUCL, imgWidth, imgRU3); //画出USL 上粉色
g.DrawString(_RUCL.ToString(), font, Brushes.Black, xLeft, imgRUCL, formatR); //设置文字内容及输出位置
g.DrawString("UCL", font, Brushes.Black, imgWidth + xLeft + 10, imgRUCL, formatL); //设置文字内容及输出位置 g.FillRectangle(Brushes.LightYellow, xLeft, imgRUCL + imgRU3, imgWidth, imgRU3); //上黄 g.FillRectangle(Brushes.LightCyan, xLeft, imgRCL - imgRU3, imgWidth, imgRU3); //上绿
//RCL
g.FillRectangle(Brushes.Black, xLeft, imgRCL, imgWidth, 1); //画出UCL 画的区域高度为 2 g.FillRectangle(Brushes.LightCyan, xLeft, imgRCL + 1, imgWidth, imgRL3); //下绿 g.DrawString(_RCL.ToString(), font, Brushes.Black, xLeft, imgRCL, formatR); //设置文字内容及输出位置 g.DrawString("CL", font, Brushes.Black, imgWidth + xLeft + 10, imgRCL, formatL); //设置文字内容及输出位置 g.FillRectangle(Brushes.LightYellow, xLeft, imgRCL + imgRL3, imgWidth, imgRL3); //下黄 //RLCL
g.FillRectangle(Brushes.MistyRose, xLeft, imgRLCL - imgRL3, imgWidth, imgRL3); //下粉色
g.DrawString(_RLCL.ToString(), font, Brushes.Black, xLeft, imgRLCL, formatR); //设置文字内容及输出位置 g.DrawString("LCL", font, Brushes.Black, imgWidth + xLeft + 10, imgRLCL, formatL); //设置文字内容及输出位置
//显示折线效果
Font _RFont = new System.Drawing.Font("Arial", 8, FontStyle.Regular); SolidBrush _RMybrush = new SolidBrush(Color.Black); Point[] _RPoints = new Point[xLength];//多少个点的 int intRTempX = xLeft + Convert.ToInt32(xSplit * 0.5);// 中心位置 StringFormat _RFormat = new StringFormat();//X图数字的输出格式 _RFormat.Alignment = StringAlignment.Near;//下方
_RFormat.FormatFlags = StringFormatFlags.DirectionVertical;//方向垂直 for (int i = 0; i < _douR.Length; i++)
{ _RPoints[i].X = intRTempX;//横坐标 _RPoints[i].Y = Convert.ToInt32(FormatY(_douR[i].ToString(), _RUCL, _RLCL, imgRUCL, imgRLCL));//纵坐标 intRTempX = intRTempX + xSplit; //绘制数字
g.DrawString(_douR[i].ToString(), _RFont, Brushes.LightSeaGreen, _RPoints[i].X, _RPoints[i].Y, _RFormat); g.FillEllipse(Brushes.LightSeaGreen, _RPoints[i].X - 2, _RPoints[i].Y - 2, 5, 5); }
LinearGradientBrush brush2 = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.LightSeaGreen, Color.LightSeaGreen, 1.2f, true);//画布大小
Pen _Rmypen = new Pen(brush2, 1);
g.DrawLines(_Rmypen, _RPoints); //绘制折线 //------------------------end R 图的--------------------------------- try
{
string strImg = DateTime.Now.ToString().Replace("-", "").Replace(" ", "").Replace(":", "") + "CharXR.gif";
//删除该文件夹中的所有 图片
image.Save(Server.MapPath("rpChart//" + strImg)); sb.Append(strImg + "#");//图片名称
for (int i = 0; i < _dataId.Length; i++)
{
//数据的ID 以及X图的坐标
sb.Append("¥" + _dataId[i] + "@" + pointsX[i].X + "@" + pointsX[i].Y + "");
//R图热点
sb.Append("¥" + _dataId[i] + "@" + _RPoints[i].X + "@" + _RPoints[i].Y + "");
}
}
catch
{ }
return sb.ToString().Trim('¥');//返回数据
}
finally
{
g.Dispose();
image.Dispose();
}
}