zoukankan      html  css  js  c++  java
  • matplotlib-2D绘图库

    安装  python -m pip install matplotlib   

     允许中文:

    使用matplotlib的字体管理器指定字体文件

    plt.rcParams['font.sans-serif']=['SimHei']    #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False   #用来正常显示负号

     

    常用字体:

    黑体 SimHei                                         微软雅黑 Microsoft YaHei

    微软正黑体 Microsoft JhengHei            新宋体 NSimSun

    新细明体 PMingLiU                              细明体 MingLiU

    标楷体 DFKai-SB                                 仿宋 FangSong

    楷体 KaiTi                                             仿宋_GB2312 FangSong_GB2312

    楷体_GB2312 KaiTi_GB2312

    散点图:

    x=[160,170,180,165,175,185]
    y=[60,70,80,65,75,85]
    plt.scatter(x,y,s=500,c='r',marker='*',alpha=1) #散点图
    #参数1 横坐标;参数2 纵坐标
    #坐标点要一一对应
    #s设置点的大小,默认20;s是面积的意思
    #c设置颜色,默认b蓝色;r红色;g绿色;c青色;m品红色;y黄色;k黑色;w白色
    #设置点的形状;o圆形默认;其它看官网 https://matplotlib.org/api/markers_api.html?highlight=markers#module-matplotlib.markers
    #alpha 设置透明度. 1不透明

    直线和点:

    x=np.linspace(-10,10,10)
    y=x**2
    plt.plot(x,y,linestyle=':',color='red',marker='o')   #画直线

    # "ob" 设置画出坐标点,但是不连线

    color 设置颜色     看 https://www.cnblogs.com/darkknightzh/p/6117528.html

    marker 设置点的形状  看官网 https://matplotlib.org/api/markers_api.html?highlight=markers#module-matplotlib.markers

    marker=  要是省略,只画点不划线;要是不省略,即画点也连线

    linestyle设置线的形状:

    字符描述
    '-' 实线样式
    '--' 短横线样式
    '-.' 点划线样式
    ':' 虚线样式
    '.' 点标记
    ',' 像素标记
    'o' 圆标记
    'v' 倒三角标记
    '^' 正三角标记
    '<' 左三角标记
    '>' 右三角标记
    '1' 下箭头标记
    '2' 上箭头标记
    '3' 左箭头标记
    '4' 右箭头标记
    's' 正方形标记
    'p' 五边形标记
    '*' 星形标记
    'h' 六边形标记 1
    'H' 六边形标记 2
    '+' 加号标记
    'x' X 标记
    'D' 菱形标记
    'd' 窄菱形标记
    '|' 竖直线标记
    '_' 水平线标记

    子图:

    plt.subplot(2, 1, 1) #同一图中分开绘制图像
    #参数1 子图的行数;参数2 子图的列数;参数3 第几个图像
    x=np.linspace(-10,10,10)
    y=x**2
    plt.plot(x,y,linestyle=':',color='red',marker='o') #画直线
    #"ob" 设置画出坐标点,但是不连线

    plt.subplot(2, 1, 2)
    x1=np.linspace(-10,10,10)
    y1=x**2-20
    plt.plot(x1,y1,linestyle='--',color='b',marker='*')

    效果图:

     条形图:

     垂直条形图 

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import matplotlib.dates as mdates
    
    #解决能显示中文
    mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    plt.title("图标题",fontsize=24)  #图的标题
    plt.xlabel("x轴标题")
    plt.ylabel("y轴标题")
    
    x=[0,1,2,3,4]
    y=[10,20,40,30,50]
    
    name=['张三','李四','李明','李雪倩','李秀艳']
    s=plt.bar(x,height=y,color='r',width=0.2,label="一部门",alpha=0.8)  #垂直条形图
    #参数1  横坐标位置;参数2 纵坐标高度
    #color 设置颜色
    #width设置条形图的宽度
    #alpha设置透明度
    #题注文本
    
    plt.ylim(0, 60)     # y轴取值范围
    plt.legend()     # 设置题注
    plt.xticks(x, name)  #标注
    #参数1 标注位置;参数2 标注文本
    
    for rect in s:#依此返回条形图信息
        height = rect.get_height()  #返回条形图高度
        plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
        #给条形图写备注
        #参数1 备注横坐标;参数2 备注纵坐标;参数3备注文本
        s=rect.get_x()  #返回条形图左下角的x坐标
        s=rect.get_width()  #返回条形图宽度
    
    plt.show()  #把图形显示出来

    效果图

     水平条形图:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import matplotlib.dates as mdates
    
    #解决能显示中文
    mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    plt.title("图标题",fontsize=24)  #图的标题
    plt.xlabel("x轴标题")
    plt.ylabel("y轴标题")
    
    x=[0,1,2,3,4]
    y=[10,20,40,30,50]
    
    name=['张三','李四','李明','李雪倩','李秀艳']
    s=plt.barh(x, y, height=0.7, color='steelblue', alpha=0.8)  #水平条形图
    #height  相当于垂直条形图的宽度
    plt.yticks(range(5), name)  #设置标注
    plt.xlim(5,50)  #x轴取值范围
    
    plt.show()  #把图形显示出来

    效果图

     堆叠条形图

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import matplotlib.dates as mdates
    
    #解决能显示中文
    mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    plt.title("图标题",fontsize=24)  #图的标题
    plt.xlabel("x轴标题")
    plt.ylabel("y轴标题")
    
    #x=[0.0,1.0,2.0,3.0,4.0]
    x=np.array([0,1,2,3,4])
    y=[10,20,40,30,50]
    s=plt.bar(x,height=y,color='r',width=0.2,alpha=0.8)
    #参数1  横坐标位置;参数2 纵坐标高度
    #color 设置颜色
    #width设置条形图的宽度
    #alpha设置透明度
    #题注文本
    plt.ylim(0, 60)     # y轴取值范围
    
    s1=plt.bar(x,height=y,color='b',width=0.2,alpha=0.8,bottom=y)  #堆叠条形图
    #bottom=y  在y条形柱的底部开始画
    plt.show()  #把图形显示出来

     效果图

     直方图:

    与条形图显示,直方图的x轴数据是连续的。直方图一般用来描述等距数据

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    #解决能显示中文
    mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    plt.title("图标题",fontsize=24)  #图的标题
    plt.xlabel("x轴标题")
    plt.ylabel("y轴标题")
    
    x=[1,2,3,4,5,6,7,8,9,0,1,1,1,1,1,6,6,6,6,6]
    y=[1,2,3,4,5,6,7,8,9,0,1,1,7,1,1,6,2,6,7,6]
    print(x)
    plt.hist(x,bins=10,color='b',density=0,edgecolor='r')  #单变量直方图
    #参数1  x轴分布数据
    #bins:直方图的长条形数目,可选项,默认为10
    #density:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数-出现的次数。normed=1,表示归一化,显示频率-出现的次数/总次数
    #edgecolor:长条形边框的颜色
    #facecolor:长条形的颜色
    #alpha:透明度
    
    #plt.hist2d(x,y,bins=10)  #双变量直方图
    #用颜色的深浅来表达
    
    plt.show()

    效果图

    饼状图:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    plt.title("图标题",fontsize=24)  #图的标题
    plt.xlabel("x轴标题")
    plt.ylabel("y轴标题")
    
    label = '超载', '船员责任心不强', '船员驾驶技术太差', '通航环境差', '海事、港航监管不到位', '船舶过于老旧', '冒险航行'  # 各类别标签
    color = 'red', 'orange', 'yellow', 'green', 'blue', 'gray', 'goldenrod'  # 各类别颜色
    size = [34, 5, 6, 14, 1, 10, 23]  # 各类别占比
    plt.axes(aspect=1)  #设置x轴与y轴的比例1:1     ????
    ex=[0,0.2,0,0,0,0,0]  #设置突出的数据,数据表示离开中心点的距离
    
    pie=plt.pie(x=size,labels=label,autopct='%1.1f%%',explode=ex,shadow=True, colors=color,pctdistance = 0.5)  #画饼状图
    #x 就是数据,饼状图就是根据这些数据来计算百分比的
    #labels   标签
    #autopct  在饼状图中显示出百分比
    #pctdistance  百分比离中心点的距离
    #explode   设置各部分离开中心点的距离
    #shadow=True   加上阴影
    #colors  设置各部分显示的颜色
    
    for font in pie[1]:
        font.set_size(8)  #设置标签字体大小
    
    for digit in pie[2]:
        digit.set_size(20)  #设置 百分比字体的大小
    
    plt.legend(loc='upper right',bbox_to_anchor=(1.2, 1))  #显示图例
    # loc: 表示位置,包括'upper right','upper left','lower right','lower left'等
    # bbox_to_anchor: 表示legend距离图形之间的距离,当出现图形与legend重叠时,可使用bbox_to_anchor进行调整legend的位置
    # 由两个参数决定,第一个参数为legend距离左边的距离,第二个参数为距离下面的距离
    #'upper right'=1;'upper left'=2;'lower left'=3;'lower right'=4; 0 自适应找位置
    #ncol 图例的列数

    plt.show()

     效果图

     颜色:

     八中内建颜色:

    b:blue  蓝色

    g:green 绿色

    r:red 红色

    c:cyan   青色

    m:magenta  品红

    y:yellow      黄色

    k:black      黑色

    w:white        白色 

    例子:

    data=np.arange(1,5)
    plt.plot(data,color='r')

    其它三种表示方法:

    plt.plot(data,color='0.2')     灰度表示法

    #在color直接写数字,数字表示灰度的深浅【在0-1之间,1好像就完全透明了,0最深】

     

     plt.plot(data,color='#FF0000')     十六进制表示法

     plt.plot(data,color=(0.2,0.3,0))   #RGB元组表示法

    【参数好像是个百分比】

     样式字符串:

     可以同时表达颜色、点型、线型

     例如  plt.plot(data,'rX:')

    r  表示红色      X表示点的形状        :表示虚线

     天子骄龙:生命诚可贵、时光价更高

  • 相关阅读:
    Linux下vsftpd的安装,Java上传文件实现。
    springboot整合shiro、redis及相关优化
    spring boot 配置文件
    spring boot 解决跨域访问
    spring-boot与spring-data-JPA的简单整合
    QQ空间里的“可能认识的人”深层思考????
    unix
    linux
    Linux中fork()函数详解
    word is too tall: try to use less letters, smaller font or bigger background 报错 java程序 验证码不显示
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10487621.html
Copyright © 2011-2022 走看看