(C#)如何利用Graphics画出一幅图表

//获取坐标

        private void Form2_MouseMove(object sender, MouseEventArgs e)
        {
            this.Text=string.Format("X={0},Y={1}",e.X,e.Y);
        }

       /// <summary>
        /// 绘制折线图
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void Form2_Paint(object sender, PaintEventArgs e)
        {
            //首先确定原点
            Point centerPoint=new Point(180,340);
            //自定义一个带有箭头的画笔
            Pen pen = new Pen(Color.Black,1);
pen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
            //得到当前窗体的Graphics对象
            Graphics g = e.Graphics;
            //画X轴和Y轴
            //g.DrawLine(pens.Black,centerPoint,new Point(centerPoint.X+600,centerPoint.Y));
            //g.DrawLine(Pens.Black, centerPoint, new Point(centerPoint.X, 40));
            g.DrawLine(pen, centerPoint, new Point(centerPoint.X + 650, centerPoint.Y));
            g.DrawLine(pen, centerPoint, new Point(centerPoint.X, 20));
            //绘制X轴的点
            for (int i = 0; i < 12; i++)
            {
                g.DrawLine(Pens.Black, new Point(centerPoint.X + (i + 1) * 50, centerPoint.Y), new Point(centerPoint.X + (i + 1) * 50, centerPoint.Y-5));
                g.DrawString((i + 1).ToString() + "月", this.Font, Brushes.Black, new PointF((centerPoint.X + (i + 1) * 50) - 7, centerPoint.Y + 3));
            }
            g.DrawString("X:月份",this.Font,Brushes.Black,new Point(828,355));
            //绘制Y轴的点
            for (int i = 0; i < 12; i++)
            {
                g.DrawLine(Pens.Black, new Point(centerPoint.X, centerPoint.Y - (i + 1) * 25), new Point(centerPoint.X + 5, centerPoint.Y-(i + 1) * 25));
                //g.DrawLine(Pens.Black, new Point(centerPoint.X , centerPoint.Y), new Point(centerPoint.X + (i + 1) * 50, centerPoint.Y - 5));
                g.DrawString(string.Format("{0}",(i+1)*10), this.Font, Brushes.Black, new PointF((centerPoint.X + 5) - 35, (centerPoint.Y - (i + 1) * 25)-5));
            }

//计算十二个月销售额对应的坐标点
            double[] data = { 56.2, 66.3, 98.4, 34.5, 55.6, 87.3, 81.4, 33.3, 46.4, 34.6, 114.5, 80.4};
            PointF[] dataPoint = new PointF[data.Length];
            for (int i = 0; i < data.Length ; i++)
            {
                float y = (float)(340 - data[i] * 2.5);
                float x = centerPoint.X + (i + 1) * 50;
                PointF point = new PointF(x, y);
                dataPoint[i] = point;
            }
            //绘制十二个点的折线
            for (int i = 0; i < data.Length ; i++)
            {
                g.DrawRectangle(Pens.Black, dataPoint[i].X, dataPoint[i].Y, 2, 2);
            }

           //将十二个点串成线
            g.DrawLines(Pens.Black, dataPoint);

            //方法二:Path方法
            //GraphicsPath path = new GraphicsPath();//要导入using System.Drawing.Drawing2D;
            //for (int i = 0; i < data.Length; i++)
            //{
            //    path.AddRectangle(new RectangleF(dataPoint[i], new SizeF(2, 2)));
            //}
            //path.AddLines(dataPoint);
            //g.DrawPath(Pens.Black, path);

            g.DrawString("Y", this.Font, Brushes.Black, new Point(155,7));
            g.DrawString("销售额:单位(万元)", this.Font, Brushes.Black, new Point(14, 14));
            g.DrawString("某工厂某产品年度销售额图表",this.Font, Brushes.Black, new Point(420,14));
            pen.Dispose();
        }

//获取坐标

        private void Form2_MouseMove(object sender, MouseEventArgs e)
        {
            this.Text=string.Format("X={0},Y={1}",e.X,e.Y);
        }

       /// <summary>
        /// 绘制折线图
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void Form2_Paint(object sender, PaintEventArgs e)
        {
            //首先确定原点
            Point centerPoint=new Point(180,340);
            //自定义一个带有箭头的画笔
            Pen pen = new Pen(Color.Black,1);
pen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
            //得到当前窗体的Graphics对象
            Graphics g = e.Graphics;
            //画X轴和Y轴
            //g.DrawLine(pens.Black,centerPoint,new Point(centerPoint.X+600,centerPoint.Y));
            //g.DrawLine(Pens.Black, centerPoint, new Point(centerPoint.X, 40));
            g.DrawLine(pen, centerPoint, new Point(centerPoint.X + 650, centerPoint.Y));
            g.DrawLine(pen, centerPoint, new Point(centerPoint.X, 20));
            //绘制X轴的点
            for (int i = 0; i < 12; i++)
            {
                g.DrawLine(Pens.Black, new Point(centerPoint.X + (i + 1) * 50, centerPoint.Y), new Point(centerPoint.X + (i + 1) * 50, centerPoint.Y-5));
                g.DrawString((i + 1).ToString() + "月", this.Font, Brushes.Black, new PointF((centerPoint.X + (i + 1) * 50) - 7, centerPoint.Y + 3));
            }
            g.DrawString("X:月份",this.Font,Brushes.Black,new Point(828,355));
            //绘制Y轴的点
            for (int i = 0; i < 12; i++)
            {
                g.DrawLine(Pens.Black, new Point(centerPoint.X, centerPoint.Y - (i + 1) * 25), new Point(centerPoint.X + 5, centerPoint.Y-(i + 1) * 25));
                //g.DrawLine(Pens.Black, new Point(centerPoint.X , centerPoint.Y), new Point(centerPoint.X + (i + 1) * 50, centerPoint.Y - 5));
                g.DrawString(string.Format("{0}",(i+1)*10), this.Font, Brushes.Black, new PointF((centerPoint.X + 5) - 35, (centerPoint.Y - (i + 1) * 25)-5));
            }

//计算十二个月销售额对应的坐标点
            double[] data = { 56.2, 66.3, 98.4, 34.5, 55.6, 87.3, 81.4, 33.3, 46.4, 34.6, 114.5, 80.4};
            PointF[] dataPoint = new PointF[data.Length];
            for (int i = 0; i < data.Length ; i++)
            {
                float y = (float)(340 - data[i] * 2.5);
                float x = centerPoint.X + (i + 1) * 50;
                PointF point = new PointF(x, y);
                dataPoint[i] = point;
            }
            //绘制十二个点的折线
            for (int i = 0; i < data.Length ; i++)
            {
                g.DrawRectangle(Pens.Black, dataPoint[i].X, dataPoint[i].Y, 2, 2);
            }

           //将十二个点串成线
            g.DrawLines(Pens.Black, dataPoint);

            //方法二:Path方法
            //GraphicsPath path = new GraphicsPath();//要导入using System.Drawing.Drawing2D;
            //for (int i = 0; i < data.Length; i++)
            //{
            //    path.AddRectangle(new RectangleF(dataPoint[i], new SizeF(2, 2)));
            //}
            //path.AddLines(dataPoint);
            //g.DrawPath(Pens.Black, path);

            g.DrawString("Y", this.Font, Brushes.Black, new Point(155,7));
            g.DrawString("销售额:单位(万元)", this.Font, Brushes.Black, new Point(14, 14));
            g.DrawString("某工厂某产品年度销售额图表",this.Font, Brushes.Black, new Point(420,14));
            pen.Dispose();
        }

时间: 2024-08-30 02:13:27

(C#)如何利用Graphics画出一幅图表的相关文章

C#如何用Graphics画出一幅图表

/// <summary>/// 绘制折线图/// </summary>/// <param name="sender"></param>/// <param name="e"></param> private void Form2_Paint(object sender, PaintEventArgs e){//首先确定原点Point centerPoint=new Point(180,340

马云近日挥毫泼墨,画出一幅马体画

12月19日消息,马云近日挥毫泼墨,画出一幅"马体"画,并称不会有第二个人画出同样的画,包括画家自己.马云同时宣布该画将会在19日网上拍卖,所得款项将会捐助给淘宝"魔豆"公益项目. 对于马云的绘画作品,网友褒贬不一,有网友评论称,马云画的是"风云雄霸天下" :也有网友评论称其实画的是马云自己"天马行空,不知所云――马云":更有网友表示,其实画的是塔防游戏.

ps利用双重画笔画出流畅的虚线

  双重画笔的事理:其实我们几乎小时辰都玩过这个游戏,那就是把两支笔拿在手里,画出两条线来,只是你那两支笔谁也约束不住谁.在画笔调板中"双重画笔"中的从笔约束"画笔笔尖外形"中的编缉刷. 结果图 1.打开画笔调板,选择画笔笔尖外形项目,选择19像素硬边笔刷,缺省如下图所示.若是画笔调板上还有其他选区被勾选,如动态外形等,一律打消.这样是为体味除其他选项的影响. 2.如下图所示拖动间距滑块,可以看到原本持续的曲线酿成了一串珠子. 3.打开"双重画笔"

Photoshop CS5混合器画笔工具轻易画出漂亮的画面

很多朋友说自己没有绘画基础,不知道如何画出漂亮的图画来.Photoshop CS5开发的混合器画笔工具可以让不懂绘画的人轻易画出漂亮的画面. 如果是美术专业的朋友使用它,更是如虎添翼. 混合器画笔工具?初次听到这个名字,你可能不知道它是什么,那就实践一下吧.我们找到一张风景照片,将它转化为水粉画风格. 如图所示,在工具条上找到混合器画笔工具.一个奇特的小窗口出现了,里边是一支画笔. 如果单击这个窗口,可以更换画笔的姿态,比如让较扁的画笔转动一个角度,在绘画时可以通过捻动笔杆改变各个方向涂抹时的笔

uffered mage-JAVA中JPanel图片缓存成BufferedImage,稍候将其画出,但画出为空白

问题描述 JAVA中JPanel图片缓存成BufferedImage,稍候将其画出,但画出为空白 5C 如何将JPanel画出的图像,保存在缓存区(Bufferedimage),再通过drawImage()画出来 public void paintComponent(Graphics g) { super.paintComponent(g); if (bufferedImage == null) { g.setColor(Color.red); for (int i = 0; i < numCi

graphics-java中如何画出3D的xyz坐标轴?

问题描述 java中如何画出3D的xyz坐标轴? graphics可不可以实现画出xyz坐标轴?如果可以的话求方法,不可以的话求指导如何实现,java中画出xyz轴并且在空间坐标系中画出一条直线?

ps简单画出可爱的雪人

  闲来无事,简简单单做个雪人,分享一下,ps新手可以一步一步做来试试看 方法/步骤 1.打开ps,新建一个空白页面,新建一个图层,利用椭圆选框工具,画出雪人的轮廓,这是给这个雪人定型,椭圆的样子就是你雪人的轮廓. 2.填充前景色,色彩为白色,填充出来雪人的身体,白白的.当然,如果以后ps技术娴熟了,也可以加一些添坠或者修饰. 3.新建一个图层,选择雪人,并在新建图层填充黑色,自由变换该图层,按住ctrl+鼠标可自由变换形状,设置该图层透明度,如图调整为30,雪人的阴影就出来了 4.利用椭圆选框

在pictureBox上用Graphics画了好几个多边形,如何删除其中的一个?

问题描述 刚刚接触C#,问的不好,还望见谅在VS2008中,为pictureBox载入一个背景图片,然后在上面点击鼠标,用Graphics画了好几个多边形,图形画好了,可是要怎么删除选定的某一个多边形呢(不能影响背景图片)?试过pictureBox.refresh(),会删除所有的多边形.如何是好,恳请高手指点,谢谢! 解决方案 本帖最后由 wuorn 于 2011-12-20 11:26:41 编辑解决方案二:如果背景的颜色是一种,可以用背景色重画一个多边形.如果不是,那就不能删除.可以考虑画

SQL语句(T-SQL汇总) 用T-SQL画出这些图形_MsSql

我个人感觉数据库这方面对于程序员来说很重要,无论是对于JAVA程序员还是DOTNET程序员以及其他编程人员来说都是必须掌握的.为了帮助大家更好的来回顾T-SQL,本人利用空闲的时间整理的一下T-SQL的语句和语法.希望对大家有用! 好的!我们先来看几个图像: 棱形三角形正方形圆形矩形梯形 上面这些图形都是用T-SQL实现的,文章的最后我们一起来用T-SQL画出这些图形. 首先,我们开始回顾一下T-SQL的基本语法: 函数 abs(x):求绝对值: 例: select abs(-3) 值为:3 s