Python的matplotlib库入门学习——超详细笔记分享

Python的matplotlib库入门学习——超详细笔记分享

print('--------------------------------------------matplotlib.pyplot API 入门学习--------------------------------------------')
MyNote = """
    *a:
        >>>默认参数都是我随便设置的
    *b:
        >>>部分参数是可以缩写的
plt.figure(figsize=(9, 9), dpi=1000)->创建画布
    figsize-> 画布大小
    dpi-> 像素密度
plt.plot(x, y, linestyle='-', color='green', linewidth=3, label='cos(x)', fillstyle='full', markersize=20)-> 折线图
    linestyle-> 图像类型(缩写是ls)
    color-> 图像颜色(缩写是c,当然了,颜色也可以缩写; example: c='r'->c='red', 参数也可以是0到1浮点数形式的字符串,越大颜色越深, c='1'->c='black')
    linewidth-> 图像线粗(缩写是lw)
    label-> 图像标题(需要plt.legend()来进行显示)
    fillstyle-> 点的填充方式,有left/right/full/bottom/top/none可选
    markersize-> 点的大小
    *a:
        >>>plot函数可以在同一个画布上创建多个图线,比如:plot(x1, y1, 'r--',…… x2, y2, 'g--', ……)表示了两个图线的不同参数配置,返回值为两个图线实例
plt.scatter(x, y, color='red', label='scatter image', s=5)-> 散点图
    s-> 点的大小
plt.xlim(a, b)->限制x坐标范围
plt.ylim(a, b)->限制y坐标范围
    a-> 最小值
    b-> 最大值
plt.xlabel('X Point', color='r')-> x轴标签
plt.ylabel('Y Point', color='y')-> y轴标签
plt.grid(color='red', lw=3, ls=':', alpha=0.5, axis='y')->网格化画布
    alpha->透明度
    axis-> 网格线选取(这里是只显示y轴,默认是全部)
plt.axhline(y=0, lw=5, ls='--', c='r')-> 绘制平行于x轴的水平参考线
plt.axvline(x=0, lw=5, ls='--', c='y')-> 绘制平行于y轴的水平参考线
plt.axvspan(xmin=-7, xmax=7, fc='r', alpha=0.5)-> 绘制垂直于x轴的参考区域
    xmin->可以认为是起点
    xmax->可以认为是终点
    fc(全称是facecolor)->区域颜色
    alpha->透明度
plt.axhspan用法同上
plt.annotate(
    text='It is the point by two funcs: (0, 0)',
    xy=(0, 0),
    xytext=(2.5, -1),
    fontsize=64,
    color='b',
    arrowprops=dict(arrowstyle='->',connectionstyle='arc3',color='b'
    ))-> 箭头注释
    text->注释内容
    xy->指向坐标
    xytext->起点坐标
    fontsize-> 字体大小
    color-> 颜色
    arrowprops-> 箭头的属性
plt.text(x, y, s='y=f(x)', fontdict=dict(weight='bold', size=64), c='r')-> 无指向文本
    x-> 文本x坐标
    y-> 文本y坐标
    s-> 文本内容
plt.title(label='Using so fluently!!!', fontdict=dict(weight='bold', size=64, loc='left'))->标题(一个画布外面可以使用多个标题)
    loc-> 标题位置
plt.legend(line=[line1, line2, ……], name=['name1', 'name2', ……], loc=1, bbox_to_anchor=(0.91, 0, 0.3, 1), title='This is the name of box.',
 shadow=True, mode='expand', fancybox=True, nloc=3, fontsize=48, borderaxespad=0.3, frameon=True, framealpha=1.0)-> 图列
    *a:
        >>>这里的line和name只是随便起的参数名字(并不存在)
    line-> 根据实例匹配对应的图线
    name-> 实例匹配对应的图线的新命名
    loc-> 位置,这里的1相当于'upper right'
    bbox_to_anchor-> 盒子的定位坐标在画布占位的百分比(左边,右边,顶边,底边)
    title-> 盒子的标题
    shadow-> 盒子边框阴影效果
    nloc-> 图例的列的数量,一般为1
    fancybox-> 是否将图例框的边角设为圆形
    fontsize-> 字体大小
    borderaxespad-> 轴与图例边框之间的距离
    frameon-> 是否显示边框
    framealpha-> 边框透明度(0~1)
    mode-> 盒子边框形状(这里的expand是让盒子直接拓展到画布两侧)
    
plt.bar(x, height, width=0.5, align='center', color=colors, tick_label=list('ABCDEFGH'), hatch='\\o', label='随机模拟', bottom=0)-> 柱状图(纵向柱状图)
    x-> 默认底部变量名称
    height-> 变量数值
    width-> 柱的粗细
    align-> 底部变量名称的位置,默认居中,当然也可以edge->左边缘开始
    color-> 柱的颜色(也可以是列表)
    tick_label-> 替换底部变量名称
    hatch-> 驻的风格
    label-> 图像标题(需要plt.legend()来进行显示)
    bottom-> 基线
    
plt.bar(x, height, width=0.5, align='center', yerr=std_, color=colors,
error_kw=dict(elinewidth=2, ecolor='yellow', capsize=3), tick_label=['园区{}'.format(s) for s in range(1, 6)])-> 误差棒柱状图
    error_kw-> 误差棒的属性组成的字典
    yerr-> 每一组对应的误差数据组成的列表
    
plt.barh(y, width, height=0.5, align='center', color='0.5', tick_label=list('ABCDEFGH'), hatch='\\\o')-> 条形图(横向柱状图)
    y-> 默认底部变量名称
    width-> 变量数值
    height-> 柱的粗细
    align-> 底部变量名称的位置,默认居中,当然也可以edge->左边缘开始
    color-> 柱的颜色(也可以是列表)
    tick_label-> 替换底部变量名称
    hatch-> 驻的风格
    
plt.barh(y, width, height=bar_width, align='center', color=colors, xerr=std_err, tick_label=['误差{}'.format(s) for s in range(5)])-> 误差棒条形图(原理类似误差棒柱状图)
plt.hist(x, bins=bin_, align='mid',histtype='bar', color='r', rwidth=0.5)-> 直方图
    x-> 统计的变量
    bins-> 统计的变量所在区间
    align-> 变量位置
    history-> 直方图类型
    color-> 直方图颜色
    rwidth-> 直方图柱子的粗细
堆积图-> 两个bar
plt.bar(x, y, align='center', color='blue', tick_label=list('ARCADE'), label='数据1', width=0.5, hatch='\\')
plt.bar(x, y1, align='center', color='pink', bottom=y, label='数据2', width=0.5, hatch='\\')
    第二个bar堆积在第一个bar上, 原理是bottom参数,使得新的 bar坐落在于上一个bar的值
堆积条形图-> 两个barh
plt.barh(y=x, width=y, height=0.7, color='blue', tick_label=list('ABCDE'), label='数据1', hatch='\\')
plt.barh(y=x, width=y, height=0.7, color='green', left=y, label='数据2', hatch='\\')
    原理同上,只不过用left来代替bottom参数
并列堆积图-> 两个bar
plt.bar(x, y, width=0.3, tick_label=list('ABCDE'), color='r', align='center', label='数据A', hatch='\\')
plt.bar(x+width, y1, width=0.3, color='b', align='center', label='数据A', hatch='\\')
    x-> 数组形式,这样可以进行计算,而列表不能
    x+width-> 这样会并一起,否则会有空隙
并列条形图-> 两个barh
plt.barh(y, width=y, height=0.3, align='center', color='red', tick_label=list('ABCDE'), label='数据1', hatch='\\')
plt.barh(y=x+height, width=y1, height=0.3, align='center', color='y',  label='数据2', hatch='\\o')
    原理与上类似
    
plt.pie(x, explode=explode, labels=labels, autopct='%3.8f%%', startangle=45, shadow=True, colors=colors,
 radius=2, pctdistance=0.5, labeldistance=0.7)-> 饼状图
    x-> 变量的量
    explode-> 分块之间的间隙,在被赋予值之后,就是分裂式饼图
    labels-> 变量名字
    colors-> 变量分配的饼对应的颜色
    autopct-> 变量占比精确位数
    startangle-> 第一个变量开始分配饼时相当于x轴的角度(逆时针为正)
    shadow-> 是否有重影效果
    radius-> 半径
    pctdistance-> 占比相对于原点的距离
    labeldistance-> 变量名字相当于原点的距离
多个plt.pie(x, autopct='%3.2f%%', radius=0.7, 
    pctdistance=0.75, colors=outer_c, textprops=dict(color='w'),
    wedgeprops=dict(width=0.3, edgecolor='w'), shadow=True, explode=expe)-> 内嵌环形饼图(这里不推荐shadow和exeplode这两个参数,因为效果图不好看了)
    textprops-> 占比文本配置
    wedgeprops-> 分块的饼图配置,这里的width表示每块(扇形)的完整性
plt.polar(theta, r, color='yellow', lw=2, marker='o', mfc='red', ms=22, ls='--)-> 极线图(极坐标)
    theta-> 点的角度和对应个数
    r-> 点到极点的距离
    color-> 点的连线颜色
    lw-> 连线的线宽
    marker-> 点的样式
    mfc-> 点的颜色
    ms-> 点的半径
    ls-> 连线风格(linestyle)
plt.scatter(x, y, s=numpy.power(10*a+20*b, 2), c=numpy.random.rand(100), cmap=mpl.cm.RdYlBu, marker='o')-> 气泡图(散点图)
    x-> x轴的值
    y-> y轴的值
    s-> 散点大小
    c-> 散点标记的颜色
    cmap-> 将浮点数映射成颜色的颜色映射表
    marker-> 点的样式
plt.stem(x, y, linefmt='--', markerfmt='*', basefmt='-.', bottom=0.)-> 棉棒图:表现出一堆变量相当于一个共同标准的离散形式
    x-> 棉棒在x轴的位置
    y-> 棉棒长度
    linefmt-> 棉棒样式
    markerfmt-> 棉棒点的样式
    basefmt-> 共同标准的所在基线的样式
    bottom-> 共同标准的所在基线
plt.boxplot(x, whis=whis, sym='o', widths=width, labels=labels, patch_artist=True, notch=True, vert=False, showfliers=False, meanprops=dict(color='r'))-> 箱线图
    x-> 每组数据组成的列表(数组)
    whis-> 四分位间距的倍数,用来确定相须包含数据的范围大小
    sym-> 离群值的样式
    widths-> 箱体的宽度
    labels-> 每组数据的名字
    notch-> 设置为True时,会使得箱体呈现V型凹陷
    patch_artist-> 每组数据箱体颜色(设置为True时,可以把此函数视为一个对象bplot,并使用如下*a配色)
    vert-> 设置为False时,显示的是水平方向的箱线图
    showfliers-> False时,不显示离群值
    showmeans-> 是否以点的形式显示均值
    meanprops-> 均值点的配置
    *a:
        >>>for patch, color in zip(bplot['boxes'], colors):
        >>>     patch.set_facecolor(color)
        
plt.errorbar(x, y, fmt='ro--', yerr=0.2, xerr=0.02, ecolor='y', elinewidth=4, ms=5, mfc='c', mec='r', capthick=1, capsize=2)-> 误差棒图
    fmt-> 样式,我这里默认值意思是蓝色o形点用虚线连接
    yerr-> y轴误差
    xerr-> x轴误差
    ecolor-> 误差棒颜色
    elinewidth-> 误差棒粗细
    ms-> 数据点大小
    mfc-> 数据点颜色
    mec-> 数据点边缘颜色
    capthick-> 误差棒边界横杠厚度
    capsize-> 误差棒边界横杠大小
    
plt.yticks(list(a1),list('ABCDE'), rotation=-90)-> y轴变量名字定位以及变量名字,变量名字相当于tick_label参数的作用,rotation是标题的旋转角度
plt.xticks(list(a2),list('ABCDE'), rotation=-90)-> x轴变量名字定位以及变量名字,变量名字相当于tick_label参数的作用,rotation是标题的旋转角度
    list(a1)-> 轴变量名字定位(即原来的轴上值的列表)
    list('ABCDE')-> 替换原来的轴上值为xxx
plt.stackplot(x, y, y1, ……, labels=['func(x)', 'func(a)', 'func(t)'], colors=['red', 'green', 'gray'])-> 堆积折线图
    labels-> 标签
    colors-> 每个折线的颜色
plt.broken_barh(xranges=[(30, 100), (180, 50), (260, 70)], yrange=(20, 8), facecolor=['red', 'red', 'gray'])-> 间断条形图
    xranges-> 由每个部分组成的列表, 比如: [(2, 50), (30, 10)]表示有两个部分, 第一个从2开始,延长50距离
    yrange-> 宽度, 比如: (20, 8)表示从20开始,宽8
    facecolor(或者 fc 或者 facecolors)-> 可以是单个颜色,也可以是颜色序列,表示每部分的颜色
plt.step(x, y, color='y', where='mid', lw=5, ls='--')-> 阶梯图
    where-> 点根据参数的选取,决定图像
plt.hist(x=[scoresT, scoresT1], bins, color=['y', 'b'], rwidth=1, histtype='bar', hatch='\\o', stacked=True)-> 堆积(并列)直方图
    x-> 堆积数据列表
    bins-> 分类区间
    colors-> 每个部分的颜色
    stacked-> 是否堆积: True表示堆积图,False表示并列图
    histtype->直方图类型,当值为stepfilled时,是阶梯型直方图
plt.table(cellText=[['班级{}'.format(ti) for ti in range(1, 6)], stu],
          cellLoc='center',
          colWidths=[0.3] * 5,
          colLabels=labels,
          colColours=colors,
          rowLabels=['班级', '学生人数'],
          rowLoc='left',
          loc='bottom')-> 表格
    cellText-> 由每一行标签对应的的值组成的列表的列表
    cellLoc-> 列标签的文字在单元格中的位置
    colWidth-> 单元格宽度
    colLabel-> 列标签
    colColour-> 列标签单元格颜色
    rowLabel-> 行标签组成的列表
    rowLoc-> 行标签文字在单元格的位置
    loc-> 表格整体的定位
    
plt.subplot(nrows, ncols, index, polar=True)-> 子区函数(相当于在一个画布上分出多个子画布)
    *a: 
        >>>subplot参数:nrows, ncols, index只是代号,输入时还需用数字代替,写成nrows=5这样的形式会报错
    nrows-> 分出画布的行数
    ncols-> 分出画布的列数
    index-> ,从上往下,左数第index个子画布(index索引从一开始)
    polar-> 把该子画布当成极坐标图
    *b:
        >>>子区函数也可以写成plt.subplot(RCN, ……)形式,其中RCN是三个整数,分别代表分出画布的行数、分出画布的列数、左数第index个子画布(index索引从一开始)
    *c:
        >>>你可以直接对子区函数的画布进行操作,比如: plt.plot(……);可以将子区函数返回一个对象实例,你也可以对该对象实例进行操作,比如:object_.plot(……)
    *d:
        >>>当然,fig=plt.figure(……)返回一个fig实例,对这个实例使用add_subplot(……)/add_axes(……)等等等方法,同样也可以进行子画布创建
    *e:
        >>>在fig实例的参数polar设置为True,会将画布变成极坐标,此时fig实例·下使用add_subplot创建子画布,子画布可以使用bar函数创建极区图
        
plt.suptitle(t='all titles', size=32, color='red')-> 针对subplot图像的共同标题
    t-> 标题名字
plt.margins(x=0.5, y=0.5)-> 设置数据范围的空白区域(x和y表示额外扩张倍数)
多个plt.subplot2grid将画布分为多个大小不同的子画布(subplot也提供了支持,但是这里不细讲)
例子:
    plt.subplot2grid((3, 4), (0, 0), colspan=1)
    plt.subplot2grid((3, 4), (0, 1), colspan=2)
    plt.subplot2grid((3, 4), (1, 0), colspan=3)
    plt.subplot2grid((3, 4), (2, 0), colspan=2)
    plt.subplot2grid((3, 4), (2, 2), colspan=1)
    plt.subplot2grid((3, 4), (0, 3), rowspan=3)
plt.subplot2grid(shape=(3, 4), loc=(0, 0), rowspan=2, colspan=3)
    shape-> 画布形状(可以看作画布由x*y个一样的子画布)
    loc-> 当前想要划分的起点
    rowspan-> 从起点横坐标开始,划分rowspan长度
    colspan-> 从起点纵坐标开始,划分colspan长度
    
plt.subplots(nrows=1, ncols=2, figsize=(8, 4), sharey='all', sharex='all')-> 同时创建画布,同时将画布分成nrows*cols个子画布
    nrows-> 分出画布的行数
    ncols-> 分出画布的列数
    figsize-> 画布大小
    sharex-> 子画布共享x轴刻度标准的模式
    sharey-> 子画布共享y轴刻度标准的模式
    *a:
        >>>subplots函数返回两个值,第一个是原画布fig,第二个是被平分的子画布实例组成的数组ax,ax[1][2](或者a[1, 2])表示第二行左数第三个子画布
    *b:
        >>>针对画布实例fig, 可以使用fig.subplots_adjust(wspace=0, hspace=0)-> 设置子画布之间的空白区域大小
        >>>    hspace-> 纵向空白大小,设置0的时候,无空白
        >>>    wsapce-> 横向空白大小,设置0的时候,无空白
    *c:
        >>>想要使得一个子画布和另一个子画布具有相同的某一坐标轴刻度,可以使用subplot获得此画布,在参数选择时使用sharex或者sharey,将值设定为另一个子画布的实例就可以了,比如:
        ax2 = plt.subplot(345, sharex=ax1)
        
plt.tick_params(axis='both', width=5, colors='y', length=12, labelsize=16, labelbottom=True,
                labeltop=True, labelleft=True, labelright=True, left=True, right=True, bottom=True, top=True)-> 坐标轴刻度的相关操作
    axis-> 选取操作的坐标轴
    width-> 刻度线宽
    colors-> 刻度线和刻度数字颜色
    length-> 刻度线长
    labelsize-> 刻度数字大小
    labelbottom/labeltop/labelleft/;abelright-> 是否显示底部/上方/左侧/右侧的刻度数字
    left/right/top/bottom-> 是否显示左侧/右侧/上方/底部的刻度
plt.subplots_adjust(wspace=0, hspace=0)-> 设置不同子画布之间的空白区域大小
    hspace-> 纵向空白大小,设置0的时候,无空白
    wsapce-> 横向空白大小,设置0的时候,无空白
plt.axes(arg=[0.5, 0., 0.3, 0.3], frameon=True, facecolor='w', aspect='equal')-> 坐标轴操作
    arg-> 坐标轴所在画布的[left, bottom, width, height]
    frameon-> 设置为True则显示坐标轴外框,反之
    facecolor-> 坐标轴背景颜色
    aspect-> 控制轴的纵横比。该参数可能使图像失真,即像素不是方形的
plt.axis([xmin. xmax, ymin, ymax)-> 重新定位坐标轴坐标范围
plt.setp(obj, visible=True)-> 设置
    obj-> 设置的对象(可以是子画布,可以是子画布的标签,可以是子画布的标题,普通画布线宽等等等)
    visible-> 刻度的显示或者隐藏
plt.gca()-> 获取当前画布(它返回的是一个Axes实例)
    *a:
        >>>Axes实例可以使用object.spines['direction'].set_color('color')
        >>>    direction-> 指定轴,有left/top/bottom/right四个值可以选择
        >>>    color-> 指定轴的颜色,设置为none时候,该方向坐标轴隐藏
    *b:
        >>>Axes实例可以使用object.spines['direction'].set_positionr(('data', 0))改变坐标轴位置
plt.pcolor([x, y], edgecolors='k', linewidths=5)-> 有助于创建带有非规则矩形网格的pseudo-color图(二维图)
    [x, y]-> 二维数组
plt.colorbar(mappable=cs)-> 颜色标尺
    mappable-> 标注对象
plt.contour(*args, cmap=mpl.cm.hot)-> 等高线
    可变参数arg-> 
    cmap-> 使用颜色映射表
    
plt.clabel(CS, fmt='%3.2f', colors='r', fontsize=16)-> 等值线标注
    CS-> 要标注的线条轮廓的对象,即plt.contour(*args, cmap=mpl.cm.hot)返回的实例
    fmt-> 标准数据精确值
plt.imshow(X, cmap=mpl.cm.hot)-> 展示图片
    X-> 构成图片的BGR数组
    cmap-> 使用颜色映射表,这里成为了图片显示的颜色
plt.savefig(road)-> 保存图片
    road(这里只是代号)-> 存储的路径加图片名字.格式(支持的格式请通过查看print(help(plt.savefig)))
部分函数支持的统一关键字参数:
    line(line只是代号,下同)-> 我们熟知的lw/ls/color/marker…………
    font-> 我们熟知的lfamily/size/color/weight…………
如果不希望在函数里面指定某些属性的值,比如字体大小,背景颜色,又或者统一线粗细/颜色等等等,你可以通过以下方案:
    plt.rcParams[key] = value
    mpl.rcParams[key] = value
    mpl.rc(……)
颜色的三种模式:
    Hex模式-> #RRGGBB字符串
    HTML/CSS模式-> 颜色英文名(部分可以缩写)
    Decimal模式-> (R,G,B)元组,元组的每个值都属于0~1范围
子画布实例支持的方法:
    plot/scatter/polar等等绘图函数
    set_title-> 子画布标题
    set_xlabel/set_ylabel-> 子画布坐标轴标签
    set_ylim/set_xlim-> 子画布坐标轴限定范围
    tick_params-> 相当于plt.tick_params的用法
    set_x(y)ticks(被代替的x(y)轴刻度值组成的序列)+set_x(y)ticklabels(由代替的x(Y)轴刻度值的标签组成的序列)
    >>>更多见在下面的关于<<<
    ………………………………………………………………………………
***************************************************************************************************************
*                                               >>>关于<<<
*关于Line2D:                                                                                                    
**a:                                                                                                        
*   >>>from matplotlib.lines import Line2D
*   >>>print(dir(Line2D))    
*   >>>查看实例支持的方法/属性        
*关于Axes:                                                                                                
**a:                                                                                                             
*   >>>from matplotlib.axes import Axes
*   >>>print(dir(Axes)) 
*   >>>查看实例支持的方法/属性
*关于Figure:画布对象
**a:
*   >>>from atplotlib.figure import Figure
*   >>>print(dir(Figure))                                                                                                             
***************************************************************************************************************
"""
print(MyNote)

第342行:改成 >>>Axes实例可以使用object.spines[‘direction’].set_position((‘data’, 0))改变坐标轴位置,set_position那里拼错了

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
聚合模块
建站技术
技术分享

文章内嵌广告