• python绘图


    申明:本人博客为自己学习记录,本文学习内容主要来源以下两篇博客。

    https://www.jianshu.com/p/78ba36dddad8

    https://blog.csdn.net/lm_is_dc/article/details/81191207

    https://www.jianshu.com/p/56a5c21ff9db

     https://blog.csdn.net/qq_33221533/article/details/81431264

    1、基础知识

    1.1 库

    主要用到的两个库:

    • numpy
    • matplotlib.pyplot

    1.2 图形组成标签

     

    图片来源:https://www.jianshu.com/p/78ba36dddad8

    几个重要的标签:

    • Figure(图像窗口):Figure 是包裹 Axes、tiles、legends 等组件的最外层窗口。它其实是一个 Windows 应用窗口。
    • Axes(轴域/子图):Axes 是带有数据的图像区域。一个 Figure 中可以有多个子图。
    • Axis(轴):X Axis和Y Axis。

    1.3 导入库

    import numpy as npimport matplotlib.pyplot as plt

    2、绘图

    2.1   包含单条曲线的图

    • 正比例函数
    from matplotlib import pyplot as plt
    
    x=[1,2,3,4,5]
    y=[2,4,6,8,10]
    plt.figure()    # 定义一个图像窗口
    plt.plot(x,y)   # 绘制曲线
    plt.show()      #显示图像

    结果:

       

    • 指数函数
    import numpy as np
    from matplotlib import pyplot as plt
    
    x1=np.arange(-np.pi,np.pi,0.01)
    # y1=np.power(x1,2)   #指数函数
    y1=x1**2              #指数函数(同上)
    plt.figure()    # 定义一个图像窗口
    plt.plot(x1,y1)  # 绘制曲线
    plt.show()      #显示图像

    结果:

    2.2  包含多条曲线的图

    • 连续调用多次plot函数

    import numpy as np
    from matplotlib import pyplot as plt
    
    x=[1,2,3,4,5]
    y=[2,4,6,8,10]
    
    x1=np.arange(-np.pi,np.pi,0.01)
    # y1=np.power(x1,2)   #指数函数
    y1=x1**2              #指数函数(同上)
    
    plt.figure()    # 定义一个图像窗口
    
    plt.plot(x,y)  # 绘制曲线y
    plt.plot(x1,y1)  # 绘制曲线y1
    
    plt.show()      #显示图像

    结果:

    •  也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线
    import numpy as np
    from matplotlib import pyplot as plt
    
    x=[1,2,3,4,5]
    y=[2,4,6,8,10]
    
    x1=np.arange(-np.pi,np.pi,0.01)
    # y1=np.power(x1,2)   #指数函数
    y1=x1**2              #指数函数(同上)
    
    plt.figure()    # 定义一个图像窗口
    
    plt.plot(x,y,x1,y1)  # 绘制曲线y,y1,   注意顺序
    #plt.plot(x1,y1)  # 绘制曲线y1
    
    plt.show()      #显示图像

     2.3  将多个曲线图绘制在一个Figure(图像窗口)区域中:对象形式创建表图

    a=plt.subplot(row,col,loc) 创建曲线图
    a.plot(x,y) 绘制曲线图

    实例:

    import numpy as np
    from matplotlib import pyplot as plt
    
    x=[1,2,3,4,5]
    y=[2,4,6,8,10]
    
    x1=np.arange(-np.pi,np.pi,0.01)
    # y1=np.power(x1,2)   #指数函数
    y1=x1**2              #指数函数(同上)
    
    x2=np.linspace(-np.pi,np.pi,5)   
    y2=np.sin(x)
    
    plt.figure()    # 定义一个图像窗口
    
    a1=plt.subplot(2,2,1) #创建曲线图
    a1.plot(x,y) #绘制曲线图
    
    a2=plt.subplot(2,2,2) #创建曲线图
    a2.plot(x1,y1)  # 绘制曲线
    
    a3=plt.subplot(223) #创建曲线图  可以省略逗号
    a3.plot(x2,y2)  # 绘制曲线
    
    plt.show()      #显示图像

    结果:

    2.4 网格线gride

    参数:

    • axis      
    • color:支持十六进制颜色
    • linestyle: – -. :   
    • alpha     :

    设置网格:

    • 直接设置:plt.grid()
    • 使用对象设置:a=plt.subplot(221)   a.grid()
    import numpy as np
    from matplotlib import pyplot as plt
    
    x=np.linspace(-np.pi,np.pi,100)
    y=np.sin(x)
    
    a1=plt.subplot(221)
    a1.grid()
    a1.plot(x,y)
    
    a2=plt.subplot(222)
    a2.grid()
    a2.plot(x,y)
    
    a3=plt.subplot(223)
    a3.grid()
    a3.plot(x,y)
    
    a4=plt.subplot(224)
    a4.grid()
    a4.plot(x,y)
    
    plt.show()      #显示图像

     结果:

    2.5 坐标轴界限

    • 修改x,y轴刻度值
    plt.axis([xmin,xmax,ymin,ymax])

    例如:plt.axis([-4,4,-2,2])

    • 关闭坐标轴
    plt.axis('off')
    • 设置画布比例
    plt.figure(figsize=(a,b))

    参数:

    • a:x刻度比例;
    • b:y刻度比例
    • (2:1)表示x刻度显示为y刻度显示的2倍 。
    • xlim方法和ylim方法

                     可以通过plt的xlim(xmin,xmax),ylim方法设置坐标轴范围;

    plt.xlim(-6,6)
    plt.ylim(-2,2)
    • 通过对象的方式设置x,y轴的刻度值范围 ax.set_xlim(a,b)
    ax1=plt.subplot(111)
    ax1.set_xlim(-4,4)
    ax1.set_ylim(-2,2)

    2.6 坐标轴标签

    • color 标签颜色
    • fontsize 字体大小
    • rotation 旋转角度
    • plt的xlabel方法和ylabel方法
    import numpy as np
    from matplotlib import pyplot as plt
    
    x=np.linspace(-np.pi,np.pi,100)
    y=np.cos(x)
    plt.title('tittle')
    plt.ylabel('yyy',fontsize=16,rotation=90,color='r')
    plt.xlabel('xxx',fontsize=16)
    plt.plot(x,y)
    plt.show()

    结果:

    • 对象方法set_xlabel/ylabel()

    2.6.1  显示坐标轴中文标签

    设置参数:fontproperties

    import numpy as np
    from matplotlib import pyplot as plt
    
    x=np.linspace(-np.pi,np.pi,100)
    y=np.cos(x)
    ax=plt.subplot(111)
    ax.set_xlabel('x轴',fontproperties='KaiTi',fontsize=18)   #对象方法
    ax.set_ylabel('y轴',fontproperties='KaiTi',fontsize=18)
    ax.set_title('标题',fontproperties='KaiTi',fontsize=16)
    ax.plot(x,y)
    plt.show()

     

    2.7、  标题

    • plt.title()方法
    • ax.set_title()方法

    2.8、图例

    2.8.1 legend方法

    两种传参方法: 

    • - 分别在plot函数中增加label参数,再调用plt.legend()方法显示 
    x=np.linspace(0,10,30)
    y=x ** 2
    plt.plot(x,y,label='aaa') #参数传递方法1,绘制曲线
    plt.plot(x+1,y-1,label='bbb') 
    plt.legend()

    • - 直接在legend方法中传入字符串列表
    import numpy as np
    from matplotlib import pyplot as plt
    x=np.linspace(0,10,30)
    y=x ** 2
    plt.plot(x,y)
    plt.plot(x+1,y-1)
    plt.legend(['a','b'])
    plt.show()

     

    2.8.2 legend的参数

    •  loc参数 : 用于设置图例标签的位置,一般在legend函数内

    • matplotlib已经预定义好几种数字表示的位置,见下表:

    例如:plt.legend(['aaa','bbb'],loc=5)

    loc参数可以是2元素的元组,表示图例左下角的坐标:

    • [0,0] 左下
    • [0,1] 左上
    • [1,0] 右下
    • [1,1] 右上

    • ncol参数 : 控制图例中有几列,在legend中设置ncol。

    例如:plt.legend(['aaa','bbb'],loc=[1,1],ncol=2)

    (ncol:两行)

    2.9、 保存图片

    使用figure对象的savefig函数来保存图片:

    • 使用plt进行绘图。。。。。。。然后保存图片
    • 然后保存图片  plt.savefig(filename='./111.jpg',dpi=500)

    参数说明:

    • 图像格式由文件扩展名推断得出,例如,.pdf推断出PDF,.png推断出PNG (“png”、“pdf”、“svg”、“ps”、“eps”……) 
    • dpi  : 图像分辨率(每英寸点数),默认为100 ;
    • facecolor :图像的背景色,默认为“w”(白色);

    读取图片:

    img=plt.imread('./111.jpg')

    plt.imshow(img)

    plt.show()

     

        为什么没有线了!!!

    3、设置plot的风格和样式

     plot语句中支持除x,y 两个参数,其他参数以字符串形式存在,来控制颜色、线型、点型等要素。

    3.1 颜色

    • 参数:c或者color;
    • plot(x,y,c = " r ")      #颜色别名
    • plot(x,y,color = "r")    
    • plot(x,y,color = "red")   #合法的HTML颜色名
    • plot(x,y,color = "#eeefff")    #十六进制字符串
    • plot(x,y,color = (0.3, 0.3, 0.4))   #归一化到[0, 1]的RGB元组

     3.2 透明度

    • alpha
    plt.plot(x,y,c='r',alpha=0.4)

    3.3 背景色

    • 设置坐标系的前景色
    plt.set_facecolor('green')
    • 设置坐标系的背景色
    plt.figure().set_facecolor('yellow')

    3.4 线型

    • 参数:linestyle或者ls;

    3.5 线宽

    • 参数:linewidth或者lw;
    plt.plot(x,y,ls='steps',lw=5)

     3.6 点型

    • marker 设置点形
    • markersize 设置点形大小
    • markerfacecolor     
    • markeredgecolor  

    plt.plot(x,y,marker='d',lw=3,markerfacecolor='yellow',markeredgecolor='red',markersize=40)   #小菱形,前背景色,大小。

    3.7  多参数连用 

    • 只可以设置颜色、点型、线型,可以把几种参数写在一个字符串内进行设置 ‘r-.o’

    3.8  在一条语句中为多个曲线进行设置

    3.8.1 多个曲线同一设置

    plt.plot(x,y,x+1,y-1,y+3,y-2,c='r')

    3.8.1 多个曲线不同设置

    •  plt.plot(x1, y1, fmt1, x2, y2, fmt2, …)
    plt.plot(x,y,'or-.',x+1,y-1,'yd',y+3,y-2,'g--')

    3.9    X、Y轴坐标刻度

    3.9.1  对x,y轴的刻度做映射

    • plt.xticks()和plt.yticks()方法:
        • 需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])
        • 支持fontsize、rotation、color等参数设置
        • 仅对x和y轴的刻度做映射而并非修改

    3.9.2  使用面向对象的方法设置刻度方法

    • 用来修改x和y轴的刻度值,而不是映射 使用画板的如下方法设置刻度axes = plt.subplot();
        • set_xticks、set_yticks 设置刻度值
        • set_xticklabels、set_yticklabels 设置刻度名称

    4、 2D图形

    4.1  直方图(hist)

    • 是一个特殊的柱状图,又叫做密度图;
    • 直方图的参数只有一个x;

    plt.hist()的参数:

    • bins : 可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10;
    • normed : 如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False;
    • color : 指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,例如DataFrame对象,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色;
    • orientation : 通过设置orientation为horizontal创建水平直方图。默认值为vertical.         horizontal  水平的
    from matplotlib import pyplot as plt
    
    x=[1,2,2,3,4,4,5]
    plt.hist(x,color='g',orientation='horizontal')
    plt.show()

    4.2 条形图 (bar,barh)

    • 垂直条形图:bar()
    • 水平条形图:barh()

    参数:

    • 第一个参数是索引。
    • 第二个参数是数据值。
    • 第三个参数是条形的宽度.:
        • width 纵向设置条形宽度
        • height 横向设置条形高度
    from matplotlib import pyplot as plt
    
    x=[1,2,3,4,5]
    y=[1,2,3,4,5]
    plt.barh(x,y,0.3,color="g")
    plt.plot(x,y,marker='o',markersize='14')
    plt.show()

    4.3 饼图(pie)

    • 饼图也只有一个参数x.
    • 饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小.

    4.3.1  普通各部分占满饼图

    from matplotlib import pyplot as plt
    
    arr=[11,22,31,15]
    plt.pie(arr)
    plt.show()

    4.3.2  普通未占满饼图:小数/比例

    属性设置:

    • labels               设置每一块的标签;
    • labeldistance   设置标签距离圆心的距离(比例值)
    • autopct            设置比例值小数保留位(%.3f%%);
    • ​ %m.nf              m 占位 n 小数点后保留几位 f 是以float格式输出
    • pctdistance      设置比例值文字距离圆心的距离
    • explode            设置每一块顶点距圆心的长度(比例值,列表);
    • colors              设置每一块的颜色(列表);
    • shadow           为布尔值,设置是否绘制阴影
    • startangle       设置饼图起始角度
    import numpy as np
    from matplotlib import pyplot as plt
    
    arr=[11,22,31,15]
    plt.pie(arr,labels=['aaa','bbb','ccc','ddd'], #标签,以列表形式列出
            labeldistance=1.2,       #标签距离圆心的距离(比例值)
            autopct='%.6f%%',       #m 占位 n 小数点后保留几位 f 是以float格式输出
            pctdistance=0.5,   #比例值文字距离圆心的距离
            explode=[0.2,0.3,0.2,0.4],    #每一块顶点距圆心的长度
            colors=['blue','yellow','orange','green'], #设置每一块的颜色
            shadow=True)  #是否绘制阴影
    plt.show()

    问题:怎么对lables中的字体进行设置????

    4.4  散点图:因变量随自变量而变化的大致趋势(scatter)

    • 散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标!
    import numpy as np
    from matplotlib import pyplot as plt
    
    x=np.random.randn(300)
    y=np.random.randn(300)
    plt.scatter(x,y,marker='d',c=np.random.rand(300,3))
    plt.show()

    5、 图形内的文字、注释、箭头

    控制文字属性的方法:

    所有的方法会返回一个matplotlib.text.Text对象。

    5.1  图形内的文字

    • plt.text()
    • plt.figtext()
    import numpy as np
    from matplotlib import pyplot as plt
    
    x=[1,2,3]
    y=[1,2,3]
    plt.bar(x,y,width=0.2)
    plt.plot(x,y,marker='d',color='r')
    plt.text(0.6,1,s='NO.3',fontsize=15)
    plt.figtext(0.4,0.8,s='RANGE',fontsize=25)
    plt.show()

     

    5.2 注释(annotate)

    • annotate() xy参数设置箭头指示的位置,
    • xytext参数设置注释文字的位置
    • arrowprops参数以字典的形式设置箭头的样式
    • width参数设置箭头长方形部分的宽度,
    • headlength参数设置箭头尖端的长度,
    • headwidth参数设置箭头尖端底部的宽度,
    • shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值)

    5.3  箭头

    样式:

    ``'-'`` None
    ``'->'`` head_length=0.4,head_width=0.2
    ``'-['`` widthB=1.0,lengthB=0.2,angleB=None
    ``'|-|'`` widthA=1.0,widthB=1.0
    ``'-|>'`` head_length=0.4,head_width=0.2
    ``'<-'`` head_length=0.4,head_width=0.2
    ``'<->'`` head_length=0.4,head_width=0.2
    ``'<|-'`` head_length=0.4,head_width=0.2
    ``'<|-|>'`` head_length=0.4,head_width=0.2
    ``'fancy'`` head_length=0.4,head_width=0.4,tail_width=0.4
    ``'simple'`` head_length=0.5,head_width=0.5,tail_width=0.2
    ``'wedge'`` tail_width=0.3,shrink_factor=0.5

    import numpy as np
    from matplotlib import pyplot as plt
    
    y = [13, 11, 13, 12, 13, 10, 30, 12, 11, 13, 12, 12, 12, 11, 12]
    plt.plot(y)
    # 为了让注释不会超出图的范围,需要调整y坐标轴的界限
    plt.ylim(ymax=35)
    plt.annotate('this spot must really
    mean something', xy=(6, 30), # xy参数设置箭头指示的位置,
                 xytext=(8, 31.5),      #xytext参数设置注释文字的位置
                 arrowprops=dict(width=8,   # arrowprops参数以字典的形式设置箭头的样式,width参数设置箭头长方形部分的宽度
                 headlength=8,     # headlength参数设置箭头尖端的长度,
                 headwidth=15,    # headwidth参数设置箭头尖端底部的宽度,
                 facecolor='black',
                 shrink=0.1))     # shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值)
    plt.show()

     问题:

    在放置文字及箭头的时候,如何精确获取位置信息?

     6、3D图

    导入包:from mpl_toolkits.mplot3d.axes3d import Axes3D

    6.1  曲面图

     

    6.2 玫瑰图/极坐标条形图

     

     

    总结:


    1. 中文支持不好的问题:

    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

  • 相关阅读:
    AIO5岗位桌面主页【我的收藏夹】只显示8行,怎样增加显示行?
    已设置了参考编号的编码规则定义,但是新增单据的时候,没有出来自动编号是什么原因?
    10个TWaver 网页3D可视化精彩案例
    HTML5大数据可视化效果(二)可交互地铁线路图
    无插件纯web 3D机房 (第四季:大型园区、地球仪效果和其他扩展应用)
    一款基于HTML5的Web 3D开发工具
    Legolas工业自动化平台入门(三)交互事件响应动作
    Legolas工业自动化平台入门(二)数据响应动作
    Legolas工业自动化平台入门(一)搭建应用
    Legolas工业自动化平台案例 —— 水源地自动化监控系统
  • 原文地址:https://www.cnblogs.com/bltstop/p/11334371.html
Copyright © 2020-2023  润新知