using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace MyEillipse
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Paint(object sender, PaintEventArgs e)
{
//声明一个string类型的数组用于存储一年中的12个月份
string[] month = new string[] {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
float[] d = new float[] { 20.5F,,10.8F,15.6F,,70.9F,50.3F,30.7F,,50.4F,30.8F,};
//画图初始化
Bitmap bMap = new Bitmap(,);
Graphics gph = Graphics.FromImage(bMap);
gph.Clear(Color.White); PointF cPt = new PointF(, );//中心点
//X轴三角形
PointF[] xPt = new PointF[] { new PointF(cPt.Y + , cPt.Y), new PointF(cPt.Y, cPt.Y-), new PointF(cPt.Y, cPt.Y+) };
//Y轴三角形
PointF[] yPt = new PointF[] { new PointF(cPt.X, cPt.X - ), new PointF(cPt.X - , cPt.X), new PointF(cPt.X + , cPt.X) };
gph.DrawString("某工厂某产品月生产量图表",new Font("宋体",),Brushes.Black,new PointF(cPt.X+,cPt.X)); //X轴
gph.DrawLine(Pens.Black, cPt.X, cPt.Y, cPt.Y, cPt.Y);
gph.DrawPolygon(Pens.Black, xPt);
gph.FillPolygon(new SolidBrush(Color.Black), xPt);
gph.DrawString("月份", new Font("宋体", ), Brushes.Black, new PointF(cPt.Y + , cPt.Y + )); //Y轴
gph.DrawLine(Pens.Black, cPt.X, cPt.Y, cPt.X, cPt.X);
gph.DrawPolygon(Pens.Black, yPt);
gph.FillPolygon(new SolidBrush(Color.Black), yPt);
gph.DrawString("单位(万)", new Font("宋体", ), Brushes.Black, new PointF(,)); for (int i = ; i <=; i++)
{
//画Y轴刻度
if (i < )
{
gph.DrawString((i * ).ToString(), new Font("宋体", ), Brushes.Black, new PointF(cPt.X - , cPt.Y - i * - ));
gph.DrawLine(Pens.Black, cPt.X - , cPt.Y - i * , cPt.X, cPt.Y - i * );
}
//画X轴
gph.DrawString(month[i - ].Substring(, ), new Font("宋体", ), Brushes.Black, new PointF(cPt.X + i * - , cPt.Y + ));
gph.DrawString(month[i - ].Substring(, ), new Font("宋体", ), Brushes.Black, new PointF(cPt.X + i * - , cPt.Y + )); if (month[i - ].Length>)
gph.DrawString(month[i-].Substring(,),new Font("宋体",),Brushes.Black,new PointF(cPt.X+i*-,cPt.Y+));
//画点
gph.DrawEllipse(Pens.Black,cPt.X+i*-1.5F,cPt.Y-d[i-]*-1.5F,,);
gph.FillEllipse(new SolidBrush(Color.Black),cPt.X+i*-1.5F,cPt.Y-d[i-]*-1.5F,,);
//画数值
gph.DrawString(d[i - ].ToString(), new Font("宋体", ), Brushes.Black, new PointF(cPt.X + i * , cPt.Y - d[i - ] * ));
//画折线 if(i>) gph.DrawLine(Pens.Red,cPt.X+(i-)*,cPt.Y-d[i-]*,cPt.X+i*,cPt.Y-d[i-]*);
}
pictureBox1.Image = bMap;
}
}
}

WinFrom折线图的更多相关文章

  1. C# 实时折线图,波形图

    此Demo是采用VS自带的Chart图表控件,制作实时动态显示的折线图,和波形图. 涉及到知识如下: Chart 控件,功能强大,可以绘制柱状图,折线图,波形图,饼状图,大大简化了对图的开发与定制. ...

  2. Android开发学习之路-自定义控件(天气趋势折线图)

    之前写了个天气APP,带4天预报和5天历史信息.所以想着要不要加一个折线图来显示一下天气变化趋势,难得有空,就写了一下,这里做些记录,脑袋不好使容易忘事. 先放一下效果: 控件内容比较简单,就是一个普 ...

  3. react-echarts之折线图的显示

    react中想要实现折线图和饼图的功能,需要引入react-echarts包,然后再实现折线图的功能.我这里引用的版本是:0.1.1.其他的写法参echarts官网即可.下面详细讲解的是我在react ...

  4. 用canvas绘制折线图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. MPAndroidChart 3.0——LineChart(折线图)

    显示效果 MPAndroidChart每一种图表的基本使用方式都基本相同 了解一种图表的实现 参考项目源码其他的图表也就差不多哩 在布局文件中定义 <com.github.mikephil.ch ...

  6. echart折线图小知识

    1)在折线图中,有时我们不想让太多折线显示,那么就隐藏,点击legend区域文字再显示. 比如我们要隐藏的折线叫"联盟广告",代码如下 var selected = {}; sel ...

  7. hellocharts的折线图与柱状图的结合之ComboLineColumnChartView

    哼哼,网上找了半天都不全,所以决定自己写一个完整的可以直接贴代码的 test.xml <?xml version="1.0" encoding="utf-8&quo ...

  8. Android自定义折线图

    老师布置了个作业:http://www.cnblogs.com/qingxu/p/5316897.html 作业中提到的 “玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动.” ...

  9. Morris.js和flot绘制折线图的比较

    [文章摘要] 最近用开源的AdminLTE做框架感觉效果特别好,其针对图表库Morris.js和flot都提供了不错的支持,也都提供了这两者的例子.不过Morris.js是基于Raphael.js来的 ...

随机推荐

  1. 总结day5 ---- ,字典的学习,增删改查,以及字典的嵌套, 赋值运算

    内容大纲: 一:字典的定义 二:字典的增加 >1:按照key增加,  无则增加,有则覆盖 >2:setdefault()  ,无则增加,有则不变 三:字典的删除 >1:pop()  ...

  2. 符合Python风格的对象

    array和bytes的转换 - 每个array必须有一个type_code,以此为依据解析底层字节序列 - array有一个frombytes方法,可以把字节序列按type_code转换成Array ...

  3. C#-进制转化

    (一)数制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径.节省设备等优点,为了便于描述,又常用八.十六进制作为二进制的缩写.一般计数都采用进位计数,其特点是 ...

  4. python学习,day3:函数式编程,*arge,**kwargs

    对于不固定长度的参数,需要使用*arge,**kwargs来调用,区别是*arge是转换为元组,而kwargs转化为字典 # coding=utf-8 # Author: RyAn Bi def te ...

  5. Docker 入门相关

    什么是Docker和容器 可能是把Docker的概念讲的最清楚的一篇文章 为什么要用Docker 相关网址 Window平台Docker下载 一些基本知识 Volume docker volume l ...

  6. [转] HBase异常:hbase-default.xml file seems to be for an old version of HBase

    [From] https://blog.yoodb.com/yoodb/article/detail/157 使用HBase Java Client连接HBase服务端创建Configuration对 ...

  7. [转] 2018年最新桌面CPU性能排行天梯图(含至强处理器)

    [FROM] http://www.idn100.com/zuzhuangdiannaopeizhi-pc2849/ 排名 处理器 图例 分数 1 Intel Xeon Platinum 8173M ...

  8. C#常用总结《一》

    集合类常用: List<T> 泛型集合 Dictionary<key,value>  字典集合 文件读取: FileStream :对各种文件读写,字节处理更好 StreamR ...

  9. 【实战】某项目SQL注入引发的思考

    数据包: 测试参数:username,测试payload: ' ' or '1'='1 ' or '1'='2 响应结果都未发生任何变化,借助sqlmap测试,结果一样: 尝试在or前面进行简单的fu ...

  10. Java 线程类别

    Java 线程类别 守护线程和非守护线程 守护线程和非守护线程之前的唯一区别在于:是否阻止JVM的正常退出. JVM正常退出是与异常退出相对的概念,异常退出如调用System.exit(status) ...