Matplotlib

  1. 库的介绍

    1. matplotlib
    2. numpy
    3. pandas
    4. TA-Lib 技术指标库
    5. tables 数据格式 hdf5
    6. jupyter 数据分析与展示的平台
  2. 如果TA-Lib出现问题,去这个网址下载

    ​ https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib

  3. 其他库找不到可以到这个网址

    https://www.lfd.uci.edu/~gohlke/pythonlibs

  4. Jupyter Notebook介绍

    1. web版的ipython
    2. Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。
  5. Jupter Notebook快速上手

    1. 界面启动

      #进入虚拟环境
      workon ai
      #输入命令
      jupter notebook
      或者
      ipython notebook
      #快捷键
      shift + enter 执行代码
      

      本地notebook默认url地址为:localhost:8888

    2. cell操作

      1. 什么是cell

        一对 in out会话被视作一个代码单元,称为cell 
        
      2. 模式

        1. 编辑模式 enter
        2. 命令模式 esc
    3. 快捷键操作:

      1. 通用快捷键:

        1. shift + enter 执行本单元代码,并跳转到下一单元
        2. ctrl + enter 执行本单元代码,留在本单元
        3. cell行号前的* ,表示代码正在运行。
      2. 命令模式:按esc进入

        1. A,在当前cell的上面添加cell
        2. B,在当前cell的下面添加cell
        3. 双击D,删除当前cell
        4. Y,cell切换到code模式
        5. M,cell切换到markdown模式
        6. Z,回退
        7. L,为当前cell加上行号<!–
        8. ctrl + shift + P,对话框输入命令直接运行
        9. 快速跳转到首个cell ,ctrl + Home
        10. 快速跳转到最后一个cell ,ctrl + end -->
      3. 编辑模式:按enter进入

        1. 多光标操作:ctrl键点击鼠标(mac :CMD + 点击鼠标)
        2. 回退:ctrl + z
        3. 补全代码: tab键
        4. 为一行或者多行代码添加/取消注释,ctrl + /,mac:cmd + /
        5. 屏蔽自动输出信息:可在最后一个语句之后加一个分号
      4. Markdown快捷键:

           # 一级标题
           ## 二级标题
           ### 三级标题
           #### 四级标题
           ##### 五级标题
           - 缩进
           		-二级缩进
           			- 三级缩进
        
  6. Matplotlib学习与快速上手

    1. 什么是matplotlib,画二维i二图表的python库

    2. 为什么要学matplotlob,数据可视化

      1. 奥卡姆剃刀原理 - 如无必要勿增实体
    3. DEMO

      import matplotlib.pyplot as plt   #导包
      %matplotlib inline                #看环境添加
      
      plt.figure()					  #创建画布(容器层)
      plt.plot([1,0,9],[4,5,6]) #绘制折线图(图像层)
      plt.show() #显示图
      
    4. 认识matplotlib图像结构

    5. Matplotlib三层结构

      1. 容器层 (底层)

        1. 画板层(Canvas)

        2. 画布层(Figure)

        3. 创建绘图区,坐标系(axes):plt.subplots()

      2. 辅助显示层

        1. 使图像显示更加 容易被用户理解,但又不会对图像结构进行破坏,主要包括Axes外观(facecolor),边框线(spines),坐标轴(axis),坐标轴名称(axis label),坐标轴刻度(tick),坐标轴刻度标签(tick label),网格线(grid),图例(legend),标题title等内容
      3. 图像层

    6. 折线图绘制与保存图片

      1. DEMO利用天气温度变化来绘图

      2. maplotlib.pyplot模块

        1. 包含一系列的matlab的函数,他的函数作用于当前图形(figure)的当前坐标系(axes)
        2. import matplotlib.pyplot as plt
      3. 折线图绘制与显示

        1. 创建画布

          plt.figure()

        2. 绘制图像

          plt.plot()

        3. 显示图像

          plt.show()

      4. 设置画布属性与图片保存

        1. plt.figure(figsize =(20,8), dpi = 80)
          1. figsize:指定图的长度
          2. dpi:图像的清晰度
          3. 返回fig对象
        2. 保存图片
          1. plt.savefig(path)
          2. 注意:plt.show()会释放figure资源,如果在plt.show()之后保存图片将只能保存空图片
      5. 数据准备

        import random
        #准备数据
        x = range(60)
        #生成y的随机数
        y_shanghai = [random.uniform(15,18) for i in x]
        #创建画布
        plt.figure(figsize=(20, 8), dpi = 80)
        #绘制图像
        plt.plot(x, y_shanghai)
        #显示图
        plt.show()
        
      6. 添加自定义x, y刻度(坐标轴显示粗细度)

        1. plt.xticks(x, **kwargs)

          x:要显示的刻度值

        2. plt.yticks(y, **kwargs)

          y:要显示的刻度值

        ​ demo:

        ​ plt.yticks(range(40)) #0–40每一个数字都显示出来
        ​ plt.yticks(range(0, 40, 5)) #0—40,每五个数字显示一次
        ​ 3.准备x 的刻度说明
        ​ x_label = [“11点{}分”.format(i) for i in x ]
        ​ plt.xticks(x[::5], x_label[::5])

        import random
        #准备数据
        x = range(60)
        #生成y的随机数
        y_shanghai = [random.uniform(15,18) for i in x]
        #创建画布
        plt.figure(figsize=(20, 8), dpi = 80)
        #绘制图像
        plt.plot(x, y_shanghai)
        #显示图
        plt.yticks(range(0, 40, 5))
        #显示标签
        x_label = ["11点{}分".format(i) for i in x ]
        plt.xticks(x[::5], x_label[::5])
        #显示图像
        plt.show()
        
      7. 解决中文显示不出来的问题

        1. 安装字体
          windows和mac和ubantu下:双击安装
          linux下:
          拷贝字体到usr/share/fonts下
          sudo cp~/SimHei.ttf /usr/share/fonts/SimHei.ttf

        2. 删除matplotlib缓存文件
          mac:删除~/.matplotlib中的缓存文件
          cd ~/.matplotlibrc
          rm -r *
          linux: 删除~/.cache/matplotlib
          cd ~/ .cache /matplotlib
          rm -r *

        3. 修改配置文件matplotlibrc
          mac:
          vi ~/.matplotlib/matplotlibrc
          将文件内容修改为:

      ​ font.family :sans-serif
      ​ font.sans-serif: SimHei
      ​ axes.unicode_minus:False
      ​ linux :
      ​ sudo find -name matplotlibrc
      ​ 返回结果:

      ​ ./.virtualenvs/ai/lib/python3.5/site-packets/matplotlib/mpl-data/matplotlibrc

      ​ 打开配置文件:

      ​ vi ./.virtualenvs/ai/lib/python3.5/site-packets/matplotlib/mpl-data/matplotlibrc

      ​ 修改内容为:

         		font.family  :sans-serif
         	 	font.sans-serif: SimHei
         		axes.unicode_minus:False 
      

      ​ 或者可以增加代码:

      import matplotlib.pyplot as plt
      plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
      plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
      
      1. 添加网格显示以及各种完善(显示多个图像),显示图例(修改图像层和辅助显示层)

        颜色字符风格字符
        r 红色- 实线
        g 绿色- - 虚线
        b 蓝色-. 点划线
        w 白色:点虚线
        c 青色’ ‘ 留空,空格
        m 洋红
        y 黄色
        k 黑色

        显示图例:

        location stringlocation
        ’best‘0
        ’upper right‘1
        ‘upper left’2
        ‘lower left’3
        ‘lower right’4
        ''right5
        ‘center left’6

        DEMO

        import matplotlib.pyplot as plt 
        import random
        import matplotlib.pyplot as plt
        plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
        plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
        #准备数据
        x = range(60)
        #生成y的随机数
        y_shanghai = [random.uniform(15,18) for i in x]
        y_beijing = [random.uniform(1,3) for i in x]
        #创建画布
        plt.figure(figsize=(20, 8), dpi = 80)
        #绘制图像
        plt.plot(x, y_beijing, color='r',linestyle="-.",label="上海")
        plt.plot(x, y_shanghai, color='b',label = "北京")
        #显示图例
        plt.legend(loc = "lower left")
        #plt.legend(loc = 4)
        #显示图
        plt.yticks(range(0, 40, 5))
        x_label = ["11点{}分".format(i) for i in x ]
        plt.xticks(x[::5], x_label[::5])
        #添加网格显示
        plt.grid(linestyle="--",alpha=0.5)
        #添加x轴,y轴描述信息及标题
        plt.xlabel("时间")
        plt.ylabel("温度")
        plt.title("中午11点0分到12点之间的温度变化图示")
        #显示图
        plt.show()
        
        1. 多个坐标系显示-plt.subplots(面向对象的画图方法)

          1. subplots可以创建一个带有多个axes(坐标系/绘图区)的图

            可以返回多个面板,坐标系对象

          import matplotlib.pyplot as plt 
          import random
          import matplotlib.pyplot as plt
          plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
          plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
          #准备数据
          x = range(60)
          #生成y的随机数
          y_shanghai = [random.uniform(15,18) for i in x]
          y_beijing = [random.uniform(1,3) for i in x]
          #创建画布
          #plt.figure(figsize=(20, 8), dpi = 80)
          figure,axes =  plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)
          #绘制图像
          axes[0].plot(x, y_beijing, color='r',linestyle="-.",label="上海")
          axes[1].plot(x, y_shanghai, color='b',label = "北京")
          #显示图例
          axes[0].legend(loc = "lower left")
          axes[1].legend(loc = "lower left")
          #plt.legend(loc = 4)
          #显示图
          x_label = ["11点{}分".format(i) for i in x ]
          axes[0].set_xticks(x[::5])
          axes[0].set_xticklabels(x_label[::5])
          axes[0].set_yticks(range(0, 40, 5))
          axes[1].set_xticks(x[::5])
          axes[1].set_xticklabels(x_label[::5])
          axes[1].set_yticks(range(0, 40, 5))
          #添加网格显示
          axes[0].grid(linestyle="--",alpha=0.5)
          axes[1].grid(linestyle="--",alpha=0.5)
          #添加x轴,y轴描述信息及标题
          axes[0].set_xlabel("时间")
          axes[0].set_ylabel("温度")
          axes[0].set_title("上海中午11点0分到12点之间的温度变化图示")
          axes[1].set_xlabel("时间")
          axes[1].set_ylabel("温度")
          axes[1].set_title("北京11点0分到12点之间的温度变化图示")
          #显示图
          plt.show()
          
        2. 绘制数学函数图像

          import numpy as np
          #准备数据
          x = np.linspace(-1,1,1000) 
          #左闭右闭,range是左闭右开
          y = 2 * x * x
          #创建画布
          plt.figure(figsize=(20,8),dpi=80)
          #绘制图像
          plt.plot(x, y)
          #添加网格
          plt.grid(linestyle="--",alpha=0.5)
          #显示图像
          plt.show()
          
          
        3. 常见图形种类及意义

          1. 折线图plot
          2. 散点图scatter
            1. 关系/规律
          3. 柱状图bar
            1. 统计/对比
          4. 直方图histogram
            1. 分布状况
          5. 饼图pie
            1. 占比
        4. 各种图的写法

          1. 柱状图

            1. 对比每部电影的票房收入
            #1.准备数据
            movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车杀人案','寻梦环游记','全球风暴','降魔传','追捕']
            tickets = [73853,57767,22354,15969,14839,8725,8716]
            #2.创建画布
            plt.figure(figsize=(20,8),dpi=80)
            #3.绘制柱状图
            x_ticks = range(len(movie_names))
            plt.bar(range(len(movie_names)),tickets,color = {'b','r','g','y','c','k','b'})
            #修改x刻度
            plt.xticks(x_ticks)
            #添加标题
            plt.title("电影票房收入对比")
            #添加网格显示
            plt.grid(linestyle="--", alpha=0.5)
            #4.显示图像
            plt.show()
            

            2.比较相同天数的票房

            plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
            plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
            #1.准备数据
            movie_names = ['雷神3:诸神黄昏','正义联盟','寻梦环游记']
            first_day = [10587.6,10062,1275.7]
            first_weekend = [36224.9,34479.6,11830]
            
            x = range(len(movie_names))
            #2.创建画布
            plt.figure(figsize=(20,8),dpi=80)
            #3.绘制柱状图
            plt.bar(range(3),first_day, width=0.2,label="首日票房")
            #plt.bar([0.2,1.2,2.2],first_weekend,width=0.2)
            plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label="首周票房")
            #修改x刻度
            plt.xticks([i+0.2 for i in x], movie_names)
            #添加标题
            plt.title("电影票房收入对比")
            plt.legend()
            #添加网格显示
            plt.grid(linestyle="--", alpha=0.5)
            #4.显示图像
            plt.show()
            
          2. 直方图

            1. 概念

              1. 组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数成为组数
              2. 组距 :每一组两个端点的差
            2. 直方图和柱状图的比较

              1. 直方图时数据的分布,柱状图比较数据的大小
                1. 直方图描述的是一组数据的频次分布,是以矩形的长度表示每一组的频数或数量,宽度则表示每组的组距,因此其高度和宽度都有意义。直方图有助于我们知道数据的分布情况,如众数,中位数的大致位置,数据是否存在缺口或异常值
              2. 直方图x轴为定量数据,柱状图x轴为分类数据
              3. 直方图柱子无间隔,柱状图柱子有间隔
              4. 直方图柱子宽度可不一,柱状图宽度须一致
            3. 直方图:电影时长的分布状况

              #1.准备数据
              x = range(120)
              time = [random.randint(100,130) for i in x]
              #2.创建画布
              plt.figure(figsize=(20,8), dpi=80)
              #3.绘制直方图
              #组距
              distance = 2
              #组数
              group_num = int((max(time) - min(time)) / distance)
              plt.hist(time, bins=group_num)
              #修改x轴刻度
              plt.xticks(range(min(time) , max(time)+2,distance))
              # 添加网格
              plt.grid(linestyle="--",alpha=0.5)
              #4.显示图像
              plt.show()
              
              
            4. 注意点:

              1. 注意组距:组距会影响直方图呈现出来的数据分布,因此在绘制直方图的时候需要多次尝试改变组距
              2. 注意Y轴所代表的变量:可以是频数,也可以是频率,若要显示频率,需要normed或者distance = true,hist后后面加参数
          3. 饼图

            1. 介绍:注意显示的百分比的位数

            2. plt.pie(x, labels=,autopct=,colors)

              1. x数量,自动算百分比
              2. labels,每部分名称
              3. autopct,占比显示指定%1.2f%%
              4. colors:每部分颜色
            3. 绘制

              #1.准备数据
              movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车杀人案','寻梦环游记','全球风暴','降魔传','追捕']
              tickets =[73853,57767,22354,15969,14839,8725,8716]
              #2,创建画布
              plt.figure(figsize=(20,8),dpi=80)
              #绘制饼图
              plt.pie(tickets,labels=movie_names,colors=['b','r','g','y','c','k','b'],autopct="%1.2f%%")
              #显示图例
              plt.lagend()
              #注意,若饼图的角度不对
              #添加:plt.axis('equal')
              #显示图像
              plt.show()
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值