zoukankan      html  css  js  c++  java
  • Matplotlib

    样式美化

    style

    • 所有样式
      • 语法:print(plt.style.available)
    • 使用样式
      语法:plt.style.use('ggplot')

    画图

    创建画布

    plt.figure(figsize=(10, 6.5))
    figsize 设置画布大小
    

    设置标题

    - title:图形标题
    - 用法:plt.title('regression result comparison')
        - title(label, fontdict=None, loc='center', pad=None, **kwargs)
            - label : 字符串,标题名
            - fontdict:标题文本外观(字典)
            {'famlily':['fantasy', 'Tahoma', 'monospace', 'Times New Roman']
             'color': 颜色
             'fontsize': 数字,字体大小
             'fontweight' : ['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'] 字体粗细
             'verticalalignment': ['center' , 'top' , 'bottom' ,'baseline'] 设置水平对齐方式
             'horizontalalignment': [left,right,center]}垂直对齐方式
             'rotation':vertical,horizontal 也可以为数字,旋转角度
             'alpha’:透明度,参数值0至1之间
             'backgroundcolor':标题背景颜色
             'bbox':给标题增加外框 ,常用参数如下:
                 boxstyle方框外形
                 facecolor(简写fc)背景颜色
                 edgecolor(简写ec)边框线条颜色
                 edgewidth边框线条大小
    例子:
    plt.title('Interesting Graph',fontsize='large',fontweight='bold') 设置字体大小与格式
    plt.title('Interesting Graph',color='blue') 设置字体颜色
    plt.title('Interesting Graph',loc ='left') 设置字体位置
    plt.title('Interesting Graph',verticalalignment='bottom') 设置垂直对齐方式
    plt.title('Interesting Graph',rotation=45) 设置字体旋转角度
    plt.title('Interesting',bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65 )) 标题   
    

    图例

    • legend
    loc
    'best'         : 0, (only implemented for axes legends)(自适应方式)
    'upper right'  : 1,
    'upper left'   : 2,
    'lower left'   : 3,
    'lower right'  : 4,
    'right'        : 5,
    'center left'  : 6,
    'center right' : 7,
    'lower center' : 8,
    'upper center' : 9,
    'center'       : 10,
    
    • 批量增加图例
    plt.legend([s1,s2],[label1,label2],loc=0)
    s1,s2为不同图形对象,例如线图,散点图
    

    x轴标题,y轴标题

    • xlabel,ylabel
    • 用法同title

    刻度线标签

    • xtickets,ytickets
    • 用法
    plt.xtickets(np.arange(5), ('a','b','c','d','e'))
    

    轴范围

    • xlim,ylim
    • 用法
    plt.xlim((1,10))
    
    

    增加文字到图形

    • text
    • 用法
    plt.text(x,t,str)
    x,y 为要添加文字的坐标
    

    color

    折线图

    - 参数:
        - s:大小
        - edgecolors:边框颜色
        - c:内置颜色
        - markevery:样式maker的个数
        - linestyle:线样式
        - maker:样式
       
    ================    ===============================
        character           description
        ================    ===============================
        ``'-'``             solid line style
        ``'--'``            dashed line style
        ``'-.'``            dash-dot line style
        ``':'``             dotted line style
        ``'.'``             point marker
        ``','``             pixel marker
        ``'o'``             circle marker
        ``'v'``             triangle_down marker
        ``'^'``             triangle_up marker
        ``'<'``             triangle_left marker
        ``'>'``             triangle_right marker
        ``'1'``             tri_down marker
        ``'2'``             tri_up marker
        ``'3'``             tri_left marker
        ``'4'``             tri_right marker
        ``'s'``             square marker
        ``'p'``             pentagon marker
        ``'*'``             star marker
        ``'h'``             hexagon1 marker
        ``'H'``             hexagon2 marker
        ``'+'``             plus marker
        ``'x'``             x marker
        ``'D'``             diamond marker
        ``'d'``             thin_diamond marker
        ``'|'``             vline marker
        ``'_'``             hline marker
        ================    ===============================
    
    
    画出原始数据y的分布,其中画图所需的x值域
    使用自变量集X的shape得到一个自增数字列表
    
    plt.plot(np.arange(X.shape[0]), y, color='k', label='true y')
    

    柱状图

    matplotlib.pyplot.bar(left, height, alpha=1, width=0.8, color=, edgecolor=, label=, lw=3)
    
    1. left:x轴的位置序列,一般采用range函数产生一个序列,但是有时候可以是字符串
    2. height:y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;
    3. alpha:透明度,值越小越透明
    4. width:为柱形图的宽度,一般这是为0.8即可;
    5. color或facecolor:柱形图填充的颜色;
    6. edgecolor:图形边缘颜色
    7. label:解释每个图像代表的含义,这个参数是为legend()函数做铺垫的,表示该次bar的标签,其中legend()函数loc参数如下:
    8. bottom:列表,在此基础上叠加柱状图
    9. hatch:填充形状{'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'}
    
    ghj =[5, 10 ,15, 20, 25]
    it =[ 1, 2, 3, 4, 5]
    plt.barh(ghj, it) 
    横着的柱状图
    

    散点图

    scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, 
        alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
    
    • x/y :数据
    • s :标记大小
      • 数值标量 : 以相同的大小绘制所有标记。
      • 行或列向量 : 使每个标记具有不同的大小。x、y 和 sz 中的相应元素确定每个标记的位置和面积。sz 的长度必须等于 x 和 y 的长度。
      • [] : 使用 36 平方磅的默认面积。
    • c:标记颜色
      • RGB 三元数或颜色名称 - 使用相同的颜色绘制所有标记。
      • 由 RGB 三元数组成的三列矩阵 - 对每个标记使用不同的颜色。矩阵的每行为对应标记指定一种 RGB 三元数颜色。行数必须等于 x 和 y 的长度。
      • 向量 - 对每个标记使用不同的颜色,并以线性方式将 c 中的值映射到当前颜色图中的颜色。c 的长度必须等于 x 和 y 的长度。要更改坐标区的颜色图,请使用 colormap 函数。
    选项 说明 对应的 RGB 三元数
    'red' 或 'r' 红色 [1,0,0]
    'green' 或 'g' 绿色 [0,1,0]
    'blue' 或 'b' 蓝色 [0,0,1]
    'yellow' 或 'y' 黄色 [1,1,0]
    'magenta' 或 'm' 品红色 [1,0,1]
    'cyan' 或 'c' 青蓝色 [0,1,1]
    'white' 或 'w' 白色 [1,1,1]
    'black' 或 'k' 黑色 [0,0,0]
    • edgecolors:轮廓颜色
    • linewidths:线宽
    • marker:标记样式

    饼图

    属性 说明 类型
    x 数据 list
    labels 标签 list
    colors 指定饼图的填充色 list
    autopct 数据标签 %0.1%% 保留一位小数
    explode 突出的部分 list
    shadow 是否显示阴影 bool
    pctdistance 数据标签的距离圆心位置 0~1
    labeldistance 设置各扇形标签(图例)与圆心的距离 0~1
    startangle 开始绘图的角度 float
    radius 半径长 默认是1
    counterclock 是否让饼图按逆时针顺序呈现
    wedgeprops 设置饼图内外边界的属性,如边界线的粗细、颜色等 {'linewidth': 1.5, 'edgecolor':'black'}
    textprops 设置饼图中文本的属性,如字体大小、颜色等 {'fontsize':12, 'color':'k'}
    frame 是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置 bool

    箱型图

    • 展示数据的分布

    • 图表作用:

      • 1.反映一组数据的分布特征,如:分布是否对称,是否存在离群点
      • 2.对多组数据的分布特征进行比较
      • 3.如果只有一个定量变量,很少用箱线图去看数据的分布,而是用直方图去观察。一般都要跟其余的定性变量做分组箱线图,可以起对比作用。(key)
    • 适合数据类型:

      • 针对连续型变量
    • 用法:

      • 只有一个变量、一组的数据(1个变量,0个定性变量),比如:学生的成绩情况
      • 只有一个变量、多组数据(1个变量,1个定性变量[班级]),比如:1、2、3班学生的成绩情况
      • 只有一个变量、多组数据(1个变量,多个定性变量[年级、班级]),比如:初一、初二、初三的1、2、3班学生的成绩情况
      • 多个变量同理,看Y轴数据大小才相近才采用此用法
    • 参数

    属性 说明 类型
    x 指定要绘制箱线图的数据 list
    notch 是否是凹口的形式展现箱线图,默认非凹口 bool
    sym 指定异常点的形状,默认为o号显示 +*.
    vert 是否需要将箱线图垂直摆放,默认垂直摆放 bool
    whis 指定上下须与上下四分位的距离,默认为1.5倍的四分位差 float
    positions 指定箱线图的位置,从左至右0,1,2递增 list
    widths 指定箱线图的宽度,默认为0.5 float
    patch_artist 是否填充箱体的颜色 str
    meanline 是否用线的形式表示均值,默认用点来表示 bool
    showmeans 是否显示均值,默认不显示 bool
    showcaps 是否显示箱线图顶端和末端的两条线,默认显示 bool
    showbox 是否显示箱线图的箱体,默认显示 bool
    showfliers 是否显示异常值,默认显示 bool
    boxprops 设置箱体的属性,如边框色,填充色等 {'color': 'b',"facecolor":"r"}
    labels 为箱线图添加标签,类似于图例的作用 list
    filerprops 设置异常值的属性,如异常点的形状、大小、填充色等 dict
    medianprops 设置中位数的属性,如线的类型、粗细等 {"linestyle":"--","color":"#FBFE00"}
    meanprops 设置均值的属性,如点的大小、颜色等 {"marker":"D","markerfacecolor":"white"}
    capprops 设置箱线图顶端和末端线条的属性,如颜色、粗细等 dict
    whiskerprops 设置须的属性,如颜色、粗细、线的类型等 dict

    注释

    • plt.annotate()
    • 参数
      • s: 为注释文本内容
      • xy: 为被注释的坐标点
      • xytext:为注释文字的坐标位置
      • xycoords: 参数如下:
      • color:b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w
      • weight:ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’
      • arrowprops
        • width:箭头的宽度(以点为单位)
        • headwidth:箭头底部以点为单位的宽度
        • headlength:箭头的长度(以点为单位)
        • shrink:总长度的一部分,从两端“收缩”
        • facecolor:箭头颜色
      • bbox给标题增加外框 ,常用参数如下:
        • boxstyle:方框外形
        • facecolor:(简写fc)背景颜色
        • edgecolor:(简写ec)边框线条颜色
        • edgewidth:边框线条大小

    画布分块

    • 语法:plt.subplot(n, m, p)
      • 第一个数字n,代表画布分成n行
      • 第二个数字m,代表画布分成m列
      • 第三个数字p,从左到右数,从上到下,第p张图

    plt.subplots()

    figsize定义画布尺寸
    fig, axes = plt.subplots(1,2,figsize=(10,4))
    for ax in axes:
        ax.plot(x, y, 'r')
        ax.set_xlabel('x')
        ax.set_ylabel('y')
        ax.set_title('title')
    fig.tight_layout() #会自动调整子图参数,使之填充整个图像区域
    

    遇到中文乱码问题

    • 找到matplotlib的配置文件位置
    import matplotlib 
    print(matplotlib.matplotlib_fname())
    #我这里的位置是C:Python27libsite-packagesmatplotlibmpl-datamatplotlibrc
    
    • 打开matplotlibrc文件进行编辑,找到#font.family : sans-serif更改为: font.family : SimHei
    • -号会显示出错的解决方法为: 在配置文件里找到#axes.unicode_minus : True更改为:axes.unicode_minus : False
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['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

    示例

    • 实例 1
    import pandas as pd
    import numpy as np
    import matplotlib as mpl
    mpl.rcParams['font.sans-serif']=['SimHei']
     
    import matplotlib.pyplot as plt
    y = range(1,17)
     
    plt.bar(np.arange(16), y, alpha=0.5, width=0.3, color='yellow', edgecolor='red', label='The First Bar', lw=3)
    plt.bar(np.arange(16)+0.4, y, alpha=0.2, width=0.3, color='green', edgecolor='blue', label='The Second Bar', lw=3)
    plt.legend(loc='upper left')
    plt.show()
    

    • 实例2
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.array([i for i in range(8)])
    fig, axes = plt.subplots(1, 2, figsize=(10,4))
    # 内嵌图
    x = np.array([i for i in range(8)])
    ax2 = fig.add_axes([0.1, 0.2, 0.1, 0.3]) # inset axes
    ax2.plot(x,x**2,'r-.',x,np.exp(x),'g*-')
    # 图1
    axes[0].plot(x,x**2,'r-.',label="y = x**2")
    axes[0].plot(x,np.exp(x),'g*-',label="y = np.exp(x)")
    axes[0].set_title("Normal scale")
    axes[0].legend(loc=2) # 标签
    # 图2
    x = np.array([i for i in range(100)])
    axes[1].plot(x,x**2,'r-.',label="y = x**2")
    axes[1].plot(x,np.exp(x),'g*-',label="y = np.exp(x)")
    axes[1].legend(loc=2)
    axes[1].set_yscale("log") # 设置纵坐标值域
    axes[1].set_title("Logarithmic scale (y)")
    #自动调整子图参数,使之填充整个图像区域
    fig.tight_layout()
    plt.show()
    
    fig.savefig("filename.png")
    
    

    • 实例3
    from numpy import *
    
    x = np.array([i for i in range(10)])
    xx = linspace(0,3, 100)
    n = np.array([0,1,2,3,4,5])
    fig, axes = plt.subplots(1, 4, figsize=(12,3))
    # 散点图
    axes[0].scatter(xx, xx + 0.25*np.random.randn(len(xx)))
    axes[0].set_title("scatter")
    
    axes[1].step(n, n**2, lw=2)
    axes[1].set_title("step")
    # 柱状图
    axes[2].bar(n, n**2, align="center", width=0.5, alpha=0.5)
    axes[2].set_title("bar")
    # 填充,两图面积差
    axes[3].fill_between(x, x**2, x**3, color="green", alpha=0.5)
    axes[3].set_title("fill_between")
    fig.tight_layout()
    plt.show()
    fig.savefig("fil.png")
    

    • 实例4
    plt.rcParams['font.sans-serif']=['FangSong_GB2312'] #用来正常显示中文标签
    colors = ['red','yellowgreen','lightskyblue']
    male = 70
    female = 20
    other = 10
    total = 100
    labels = ['男性', '女性', '未填']
    sizes = [male, female, other]
    colors = ['cornflowerblue', 'orange', 'limegreen']
    explode = (0, 0.1, 0)
    
    fig1, ax1 = plt.subplots()
    ax1.pie(sizes, explode=explode, labels=labels, colors=colors,
            autopct='%1.1f%%', shadow=False, startangle=90,
            textprops={'fontsize': 12, 'color': 'k'},
            labeldistance = 1
            )
    ax1.axis('equal')
    plt.legend(loc='upper right')
    
    plt.show()
    

  • 相关阅读:
    nginx和phpfpm保持长连接
    单件模式+打开窗体+窗体构造函数参数
    Java REST框架一览(转)
    什么原因成就了一位优秀的程序员?(转)
    使用 sqlRest 将数据库转换为 REST 风格的 Web 服务(转)
    浏览器插件之ActiveX开发系列(转载)
    Java JSON技术框架选型与实例(转)
    SQL参数绑定
    ab压力测试工具使用
    Jintegra使用注意事项
  • 原文地址:https://www.cnblogs.com/rener0424/p/11231146.html
Copyright © 2011-2022 走看看