博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#生成柱状图,包括刻度,刻度值.
阅读量:6648 次
发布时间:2019-06-25

本文共 6637 字,大约阅读时间需要 22 分钟。

http://blog.csdn.net/xyz7885696/article/details/2482842

 

using System;

using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace qyjz
{
    public class DrawHelper
    {
        /// <summary>
        ///渐变颜色的函数
        /// </summary>
        /// <returns>LinearGradientBrush 对象</returns>
        private LinearGradientBrush GetColor(int ylong)
        {
            LinearGradientBrush linGrBrush = new LinearGradientBrush(
            new Point(0, 0),
            new Point(0, ylong),
            Color.FromArgb(255, 255, 0, 0),   // Opaque red
            Color.FromArgb(255, 0, 0, 255));
            return linGrBrush;
        }
        /// <summary>
        /// 刻度线生成函数
        /// </summary>
        /// <param name="objGraphics">Graphics对象</param>
        /// <param name="intxLong">图像x大小</param>
        /// <param name="intyLong">图像y大小</param>
        /// <param name="intxLeft">图像左边巨</param>
        /// <param name="intEnd">图像下边距</param>
        /// <param name="intyMax">刻度数</param>
        /// <param name="kdvalue">刻度值</param>
        /// <returns></returns>
        public Graphics DwLine(Graphics objGraphics, int intxLong, int intyLong, int intxLeft, int intEnd, int intyMax, float kdvalue, string title)
        {
            objGraphics.Clear(Color.White);
            int intyScale = intyLong / intyMax;
            objGraphics.DrawString(title, new Font("宋体", 9), Brushes.Black, new PointF(5 + intxLeft, 5));
            Point p1 = new Point(intxLeft - 10, intyLong);
            Pen p = new Pen(Color.Silver);
            p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            for (int i = 0; i < intyMax; i++)
            {
                p1.Y = intyLong - i * intyScale;
                Point pt = new Point(p1.X + 10, p1.Y);
                objGraphics.DrawLine(Pens.Black, pt, new Point(p1.X + 15, p1.Y));//刻度线y轴
                objGraphics.DrawLine(p, intxLeft, intyLong - intEnd - i * intyScale, intxLong, intyLong - intEnd - i * intyScale);
                objGraphics.DrawString(Convert.ToString(kdvalue * i), new Font("宋体", 9), Brushes.Black, new Point(p1.X - 20, p1.Y - 30));
            }
            objGraphics.DrawLine(new Pen(Color.Black, 2), intxLeft, intyLong - intEnd, intxLeft, 0);//绘制y轴
            objGraphics.DrawLine(new Pen(Color.Black, 2), intxLeft, intyLong - intEnd, intxLong, intyLong - intEnd);//绘制x轴
            return objGraphics;
        }
        /// <summary>
        /// 生成矩形图
        /// </summary>
        /// <param name="objGraphics">Graphics 对象</param>
        /// <param name="intxLong">图像x大小</param>
        /// <param name="intyLong">图像y大小</param>
        /// <param name="intxLeft">图像左边距</param>
        /// <param name="intEnd">图像下边距</param>
        /// <param name="intyMax">刻度数</param>
        /// <param name="kdvalue">刻度值</param>
        /// <param name="title">图片显示名</param>
        /// <param name="mydt">DataTable的值</param>
        /// <returns>Graphics</returns>
        public Graphics DwMonthjxt(Graphics objGraphics, int intxLong, int intyLong, int intxLeft, int intEnd, int intyMax, float kdvalue, DataTable mydt, int jdwidth)
        {
            int intyScale = intyLong / intyMax;
            float jx = Convert.ToInt32(jdwidth * 0.618);
            for (int i = 0; i < mydt.Rows.Count; i++)
            {
                float values = Convert.ToInt32(mydt.Rows[i]["co"].ToString());
                if (values != 0)
                {
                    objGraphics.FillRectangle(GetColor(intyLong), (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd, jx, values / kdvalue * intyScale);//画矩形内部图案
                    objGraphics.DrawRectangle(Pens.Black, (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd, jx, values / kdvalue * intyScale);//矩形外部图案
                    objGraphics.DrawString(mydt.Rows[i]["co"].ToString(), new Font("宋体", 9), Brushes.Black, (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd - 15);//矩形上的数值
                    objGraphics.DrawString(mydt.Rows[i]["months"].ToString() + "月", new Font("宋体", 9), Brushes.Black, (i * jdwidth) + intxLeft + 20, intyLong - intEnd + 3);//x轴下的文字
                }
                else
                {
                    objGraphics.FillRectangle(GetColor(intyLong), (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd - 2, jx, values / kdvalue * intyScale + 2);//画矩形内部图案
                    objGraphics.DrawRectangle(Pens.Black, (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd - 2, jx, values / kdvalue * intyScale + 2);//矩形外部图案
                    objGraphics.DrawString(mydt.Rows[i]["co"].ToString(), new Font("宋体", 9), Brushes.Black, (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd - 15);//矩形上的数值
                    objGraphics.DrawString(mydt.Rows[i]["months"].ToString() + "月", new Font("宋体", 9), Brushes.Black, (i * jdwidth) + intxLeft + 20, intyLong - intEnd + 3);//x轴下的文字
                }
            }
            return objGraphics;
        }
        /// <summary>
        /// 生成矩形图
        /// </summary>
        /// <param name="objGraphics">Graphics 对象</param>
        /// <param name="intxLong">图像x大小</param>
        /// <param name="intyLong">图像y大小</param>
        /// <param name="intxLeft">图像左边距</param>
        /// <param name="intEnd">图像下边距</param>
        /// <param name="intyMax">刻度数</param>
        /// <param name="kdvalue">刻度值</param>
        /// <param name="title">图片显示名</param>
        /// <param name="mydt">DataTable的值</param>
        /// <returns>Graphics</returns>
        public Graphics DwHourjxt(Graphics objGraphics, int intxLong, int intyLong, int intxLeft, int intEnd, int intyMax, float kdvalue, DataTable mydt, int jdwidth)
        {
            int intyScale = intyLong / intyMax;
            float jx = Convert.ToInt32(jdwidth * 0.618);
            for (int i = 0; i < mydt.Rows.Count; i++)
            {
                float values = Convert.ToInt32(mydt.Rows[i]["co"].ToString());
                if (values != 0)
                {
                    objGraphics.FillRectangle(GetColor(intyLong), (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd, jx, values / kdvalue * intyScale);//画矩形内部图案
                    objGraphics.DrawRectangle(Pens.Black, (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd, jx, values / kdvalue * intyScale);//矩形外部图案
                    objGraphics.DrawString(mydt.Rows[i]["co"].ToString(), new Font("宋体", 9), Brushes.Black, (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd - 15);//矩形上的数值
                    objGraphics.DrawString(mydt.Rows[i]["Hours"].ToString() + "时", new Font("宋体", 9), Brushes.Black, (i * jdwidth) + intxLeft + 20, intyLong - intEnd + 3);//x轴下的文字
                }
                else
                {
                    objGraphics.FillRectangle(GetColor(intyLong), (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd - 2, jx, values / kdvalue * intyScale + 2);//画矩形内部图案
                    objGraphics.DrawRectangle(Pens.Black, (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd - 2, jx, values / kdvalue * intyScale + 2);//矩形外部图案
                    objGraphics.DrawString(mydt.Rows[i]["co"].ToString(), new Font("宋体", 9), Brushes.Black, (i * jdwidth) + intxLeft + 20, intyLong - values / kdvalue * intyScale - intEnd - 15);//矩形上的数值
                    objGraphics.DrawString(mydt.Rows[i]["Hours"].ToString() + "时", new Font("宋体", 9), Brushes.Black, (i * jdwidth) + intxLeft + 20, intyLong - intEnd + 3);//x轴下的文字
                }
            }
            return objGraphics;
        }
    }
}

转载于:https://www.cnblogs.com/zcm123/p/6936897.html

你可能感兴趣的文章
运维常用的系统命令
查看>>
C++--标准库 字符串类
查看>>
Java的新项目学成在线笔记-day1(七)
查看>>
160个CRACK_ME系列 第一弹
查看>>
什么是记录型数字压力表?被应用在哪些领域?
查看>>
零基础学习Python的4个方法
查看>>
Clouds
查看>>
好程序员带你认识HTML5中的WebSocket
查看>>
PDA是什么功能有哪些
查看>>
一文了解 SaCa DataViz 企业版和标准版的区别
查看>>
CentOS 5的KVM安装使用说明
查看>>
php warning: php startup: in unknown on line 0
查看>>
【CentOS 7.1】配置防火墙 iptables
查看>>
二十七、单张图片上传预览
查看>>
一例千万级pv高性能高并发网站架构
查看>>
Android平台通用安全问题分析及策略(一)
查看>>
Oracle面向对象的应用实例
查看>>
总结-计划
查看>>
POJ 2506 Tiling dp+大数 水题
查看>>
EasyCHM - 电子书制作软件
查看>>