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

简介: //获取坐标         private void Form2_MouseMove(object sender, MouseEventArgs e)         {             this.
//获取坐标
        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();
        }

相关文章
|
1月前
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
17 0
|
7天前
R语言中绘制箱形图的替代品:蜂群图和小提琴图
R语言中绘制箱形图的替代品:蜂群图和小提琴图
|
18天前
|
前端开发 API vr&ar
Android开发之OpenGL绘制三维图形的流程
即将连载的系列文章将探索Android上的OpenGL开发,这是一种用于创建3D图形和动画的技术。OpenGL是跨平台的图形库,Android已集成其API。文章以2D绘图为例,解释了OpenGL的3个核心元素:GLSurfaceView(对应View)、GLSurfaceView.Renderer(类似Canvas)和GL10(类似Paint)。通过将这些结合,Android能实现3D图形渲染。文章介绍了Renderer接口的三个方法,分别对应2D绘图的构造、测量布局和绘制过程。示例代码展示了如何在布局中添加GLSurfaceView并注册渲染器。
21 1
Android开发之OpenGL绘制三维图形的流程
|
2月前
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程(下)
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
106 0
|
2月前
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程(上)
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
61 0
|
4月前
|
存储 数据可视化
使用 plotly 绘制旭日图
使用 plotly 绘制旭日图
67 0
|
8月前
|
Go
如何用ggplot2绘制基因功能富集气泡图?
如何用ggplot2绘制基因功能富集气泡图?
|
11月前
|
机器学习/深度学习 算法 数据可视化
R绘图案例|基于分面的面积图绘制
R绘图案例|基于分面的面积图绘制
10830 0
|
11月前
|
数据可视化 数据处理
R绘图案例|基于分面的折线图绘制
R绘图案例|基于分面的折线图绘制
177 0
|
数据可视化
Qt开发技术:Q3D图表开发笔记(三):Q3DSurface三维曲面图介绍、Demo以及代码详解
qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的。其中就包括华丽绚烂的三维图表,数据量不大的时候是可以使用的。前面介绍了基础的q3d散点图、柱状图,本篇介绍基础的三维曲面图。Q3DSurface类提供了渲染3D曲面图的方法。该类使开发人员能够渲染3D表面图,并通过自由旋转场景来查看它们。可以通过QSurface3DSeries控制曲面的视觉财产,例如绘制模式和着色。