这种折线图表怎么做? 我想做一个类似下面这个网站“北京天气实况”的折线图表http://www.weather.com.cn/html/weather/101010100.shtml请问这个是怎么做,请高手给个例子,谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #region 生成折线图 public static string DrawImage(float[] oFloat, bool isText,string path) { #region 数值 int width = 660; //图片宽度 int height = 220; //图片高度 int iX = 20; //左,下方向留白 int iH = height - 20; //显示区域高度 int iW = width - 20; //显示区域宽度 float fHeight = 200; //纵轴总长度 float fVirtualHeight = fHeight; //虚拟总长度 //算出最大的正整数,如输入300,则最大数为400 float fTempMaxNum = MaxFloat(oFloat); while (fVirtualHeight < fTempMaxNum) { fVirtualHeight += 100; } float fCount = 10; //纵轴分成10份,固定 float fPx = fHeight / fCount; //每份多少像素,固定 float fRmb = fVirtualHeight / fCount; //每份表示多少钱,根据参数中最大数决定 float fPPx = fPx / fRmb; //每钱多少像素, #endregion #region 构造图用 //构造BITMAP Bitmap oBmap = new Bitmap(width, height); //新建一个画板 Graphics g = Graphics.FromImage(oBmap); //设置高质量插值法 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //设置高质量,低速度呈现平滑程度 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //清空画布并以透明背景色填充 g.Clear(Color.White); //新建钢笔,灰色,1px Pen oPen = new Pen(Color.Gray); Pen oSpen = new Pen(Color.Silver); Pen oRpen = new Pen(Color.Red); //定义黑色过渡型笔刷 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, oBmap.Width, oBmap.Height), Color.Black, Color.Black, 1.2F, true); LinearGradientBrush brush_red = new LinearGradientBrush(new Rectangle(0, 0, oBmap.Width, oBmap.Height), Color.Red, Color.Red, 1.2F, true); #endregion //计算宽度,高度份数 float wLens = iW / oFloat.Length; #region 画横纵坐标 //线帽 oPen.EndCap = LineCap.ArrowAnchor; //画横纵坐标 g.DrawLine(oPen, iX, iH, iX, iX - 10); g.DrawString("y", new Font("Arial", 8), brush, 25, 1); g.DrawLine(oPen, iX, iH, iW + 10, iH); g.DrawString("x", new Font("Arial", 8), brush, iW + 10, iH - 1); //输出标题 //g.DrawString(string.Format("CreateDate {0}", DateTime.Now.ToString()), new Font("Arial", 8), brush, iW / 2, 1); #endregion #region 画横坐标 //画横坐标 for (int i = 0; i < oFloat.Length; i++) { //输出小竖线 if (i == DateTime.Now.Day) { g.DrawString(string.Format("{0}", i), new Font("Arial", 7), brush_red, (float)wLens * i + iX - 4.5f, iH); } else { g.DrawString(string.Format("{0}", i), new Font("Arial", 7), brush, (float)wLens * i + iX - 4.5f, iH); } g.DrawLine(oSpen, wLens * (i + 1) + iX, iH, wLens * (i + 1) + iX, iX);//画长线 } #endregion #region 画纵坐标 //画纵坐标 for (int i = 0; i < fCount; i++) { if (i != 0) { g.DrawString(string.Format("{0}", fVirtualHeight - fRmb * i), new Font("Arial", 7), brush, (float)iX - 20.5f, i * fPx - 5); } g.DrawLine(oSpen, iX, i * fPx + iX, iW, i * fPx + iX);//长线 } #endregion #region 生成点列 //生成点列 PointF[] oPoint = new PointF[oFloat.Length]; for (int i = 0; i < oFloat.Length; i++) { //记录坐标 oPoint[i] = new PointF(i * wLens + iX, iH - oFloat[i] * fPPx); //输出标识 if (isText && oFloat[i] > 0) { g.DrawString(string.Format("{0}", oFloat[i]), new Font("Arial", 8), brush, oPoint[i]); } } #endregion g.DrawLines(oRpen, oPoint); //g.DrawCurve(oRpen, oPoint); //生成图片 oBmap.Save(path, ImageFormat.Gif); oBmap.Dispose(); g.Dispose(); return string.Empty; } #endregion 折现图可用 zedgraph或owc等控件实现 silverlight的报表要不要?点我 这个是用Flex做的CSDN有这个版块,http://forum.csdn.net/SList/Flex 建议楼主可以使用第三方报表,也不需要编程,两分钟就可以搞定了(如果熟练的话,或许还用不着哦,呵呵。。)具体操作:插入图表样式,选择折线图,然后通过绑定数据(就是24小时对应的气温温度),点击确定就可以了,就是这么简单,如果数据库中的数据有变动,折线图数值展现也会随着改变。我用的是FineReport报表,很多图表功能都能实现,建议可以现在试用的,操作及其简单的,他们的文档说明还很详细呢 50分求高手如何在网页里不预览直接套打? asp.net如何实现进度条? position 定位div 时 滚轮失灵 如何用js+div作出类似前程无忧的职位搜索代码(百分跪求))) 请问大在ASP.NET下实现这种效果有什么好又比较简便的方法? 在ASP.net中怎么操作客户端控件啊 老有乱码,救命!!! 高难问题,如何判断多个时间段(只包含时间,没有日期)之间是否有交集,?? datagrid的列的顺序怎么通过代码改变 关于.net问题,请各位大虾帮帮忙!在线急等 asp.net做网页,导航问题。 WAP问题。。 大家进来看看
public static string DrawImage(float[] oFloat, bool isText,string path) {
#region 数值
int width = 660; //图片宽度
int height = 220; //图片高度
int iX = 20; //左,下方向留白
int iH = height - 20; //显示区域高度
int iW = width - 20; //显示区域宽度 float fHeight = 200; //纵轴总长度
float fVirtualHeight = fHeight; //虚拟总长度
//算出最大的正整数,如输入300,则最大数为400
float fTempMaxNum = MaxFloat(oFloat);
while (fVirtualHeight < fTempMaxNum) {
fVirtualHeight += 100;
}
float fCount = 10; //纵轴分成10份,固定
float fPx = fHeight / fCount; //每份多少像素,固定
float fRmb = fVirtualHeight / fCount; //每份表示多少钱,根据参数中最大数决定
float fPPx = fPx / fRmb; //每钱多少像素,
#endregion #region 构造图用
//构造BITMAP
Bitmap oBmap = new Bitmap(width, height); //新建一个画板
Graphics g = Graphics.FromImage(oBmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //清空画布并以透明背景色填充
g.Clear(Color.White); //新建钢笔,灰色,1px
Pen oPen = new Pen(Color.Gray);
Pen oSpen = new Pen(Color.Silver);
Pen oRpen = new Pen(Color.Red); //定义黑色过渡型笔刷
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, oBmap.Width, oBmap.Height), Color.Black, Color.Black, 1.2F, true);
LinearGradientBrush brush_red = new LinearGradientBrush(new Rectangle(0, 0, oBmap.Width, oBmap.Height), Color.Red, Color.Red, 1.2F, true); #endregion //计算宽度,高度份数
float wLens = iW / oFloat.Length; #region 画横纵坐标
//线帽
oPen.EndCap = LineCap.ArrowAnchor;
//画横纵坐标
g.DrawLine(oPen, iX, iH, iX, iX - 10);
g.DrawString("y", new Font("Arial", 8), brush, 25, 1);
g.DrawLine(oPen, iX, iH, iW + 10, iH);
g.DrawString("x", new Font("Arial", 8), brush, iW + 10, iH - 1);
//输出标题
//g.DrawString(string.Format("CreateDate {0}", DateTime.Now.ToString()), new Font("Arial", 8), brush, iW / 2, 1);
#endregion #region 画横坐标
//画横坐标
for (int i = 0; i < oFloat.Length; i++) {
//输出小竖线
if (i == DateTime.Now.Day) {
g.DrawString(string.Format("{0}", i), new Font("Arial", 7), brush_red, (float)wLens * i + iX - 4.5f, iH);
} else {
g.DrawString(string.Format("{0}", i), new Font("Arial", 7), brush, (float)wLens * i + iX - 4.5f, iH);
}
g.DrawLine(oSpen, wLens * (i + 1) + iX, iH, wLens * (i + 1) + iX, iX);//画长线
}
#endregion #region 画纵坐标
//画纵坐标
for (int i = 0; i < fCount; i++) {
if (i != 0) {
g.DrawString(string.Format("{0}", fVirtualHeight - fRmb * i), new Font("Arial", 7), brush, (float)iX - 20.5f, i * fPx - 5);
}
g.DrawLine(oSpen, iX, i * fPx + iX, iW, i * fPx + iX);//长线
}
#endregion #region 生成点列
//生成点列
PointF[] oPoint = new PointF[oFloat.Length];
for (int i = 0; i < oFloat.Length; i++) {
//记录坐标
oPoint[i] = new PointF(i * wLens + iX, iH - oFloat[i] * fPPx); //输出标识
if (isText && oFloat[i] > 0) {
g.DrawString(string.Format("{0}", oFloat[i]), new Font("Arial", 8), brush, oPoint[i]);
}
}
#endregion
g.DrawLines(oRpen, oPoint);
//g.DrawCurve(oRpen, oPoint); //生成图片
oBmap.Save(path, ImageFormat.Gif); oBmap.Dispose();
g.Dispose();
return string.Empty;
}
#endregion
具体操作:插入图表样式,选择折线图,然后通过绑定数据(就是24小时对应的气温温度),点击确定就可以了,就是这么简单,如果数据库中的数据有变动,折线图数值展现也会随着改变。
我用的是FineReport报表,很多图表功能都能实现,建议可以现在试用的,操作及其简单的,他们的文档说明还很详细呢