实例代码

# 导入 matplotlib 的所有内容(nympy 可以用 np 这个名字来使用)
from pylab import *

# 创建一个 8 * 6 点(point)的图,并设置分辨率为 80
figure(figsize=(8,6), dpi=80)

# 创建一个新的 1 * 1 的子图,接下来的图样绘制在其中的第 1 块(也是唯一的一块)
subplot(1,1,1)

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)

# 绘制余弦曲线,使用蓝色的、连续的、宽度为 1 (像素)的线条
plot(X, C, color="blue", linewidth=1.0, linestyle="-")

# 绘制正弦曲线,使用绿色的、连续的、宽度为 1 (像素)的线条
plot(X, S, color="green", linewidth=1.0, linestyle="-")

# 设置横轴的上下限
xlim(-4.0,4.0)

# 设置横轴记号
xticks(np.linspace(-4,4,9,endpoint=True))

# 设置纵轴的上下限
ylim(-1.0,1.0)

# 设置纵轴记号
yticks(np.linspace(-1,1,5,endpoint=True))

# 以分辨率 72 来保存图片
# savefig("exercice_2.png",dpi=72)

# 在屏幕上显示
show()

设置底层图片的大小

  1. figsize()函数设置散点图是几×几大小的
  2. dpi设置分辨率(像素)

    像素的定义:

  3. 在由一个数字序列表示的图像中的一个最小单位
  4. 当像素点的大小一定时,像素点约多,照片越大

    改变线条的颜色和粗细

  5. plot()函数
  6. color参数设置颜色
  7. linewidth参数设置线条粗细
  8. linestyle参数设置线条风格

plot函数详解:

  1. plt.plot(x,y,linestyle=’-‘,linewidth=’x’,label=’xxx’,color=’xxx’)
  2. x:x轴上的值
  3. y:y轴上的值
  4. linestyle:线条风格
  5. linewidth:线条粗细
  6. label:标签文本

plot函数常见问题:

x and y must have same first dimensition,but have shapes (4,) and (6,)
  1. 意为:x和y必须参数的个数相同(个数不相同,有的只有一个坐标你怎么画点呢?)
    Lg0l1U.md.png
  2. ing

linestyle参数

'-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'

设置图片边界

设置记号

  1. r表示不需要转义,raw(生的),LATEX用法,python中使用latex,需要在文本的后面加上$,\pi会转义为pi
    xticks(lis,[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$-\pi$',r'$-\pi$'])
  2. 后面数组中的每一个元素都与前面元素一一对应

设置轴:

  1. matplotlib的图中,默认有四个轴,两个横轴和两个竖轴,通过ax.plt.gca()方法获取,gca是get current axes的缩写(axes是轴的意思)
  2. 总共有四个轴:top,bottom,left,right

    由于axes会获取到四个轴,而我们只需要两个轴,所以我们需要把另外两个轴隐藏,把顶部和右边轴的颜色设置为none,将不会显示

    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
  3. 将会看见top和right边被隐藏

    移动下面和左边的轴到指定的位置

    具体函数:ax.spines[‘四个轴的位置’].set_position(‘值的类型’,具体值)

    一定一定要注意,spines后面是[]而非(),set_position後面是()
    我對此的理解為:[]表示选择,ax在gca()时已经初始化了,[]是在top,bottom,left和right中的选择;()表示需补充参数,参数未经过初始化
    区分选择和补充的含义

    以下是set_position中各种值的类型

  4. data:移动轴的位置到交叉轴的指定坐标
  5. outward:不太懂
  6. axes:0.0~1.0之间的值,整个轴上的比例
  7. center:(‘axes’,0.5)
  8. zero:(‘data’,0.0)
    ax.spines['bottom'].set_position(('data',0))
    ax.spines['left'].set_position(('data',0))
    LrlVm9.png
    LrlZwR.png
  9. 由上图可看出,这个轴其实不是坐标轴,而是图形的边界
  10. 我认为:top和right的轴是图形的边界,不能够改变坐标轴
  11. 而left和bottom可以改变坐标轴的位置,参数如上图所示

添加图例:

  1. 在plot函数中以[键-值] 的形式增加一个参数
    plot(X,S,color="blue",linewidth=2.5,linestyle="-",lable="图例名称")
    legend(loc="位置")
  2. legend位置参数:upper,bottom,left,right

    常用legend函数参数:

  3. loc:图例位置
  4. fontsize:字体大小
  5. edgecolor: frame edgecolor
  6. facecolor: frame facecolor

特殊点添加注释:函数scatter(意为分散的点)

  1. 前提:x,y轴包括数值以及大小和颜色
  2. https://www.jb51.net/article/127806.htm
    scatter([t,],[np.cos(t),],50,color='blue')
  3. scatter(x,y,[size],[color],[marker])

    scatter参数详解:

  4. x,y:形如shape[n,]不全的数组,即添加注释点的位置
  5. size:直接给出点的大小,标量或者形如shape[n,]的数组
  6. color:色彩或颜色序列
  7. marker:markstyle,可选,默认’o’
    marker

annotate参数详解

annotate(s,xy,xytext=None,xycoords='data',textcoords=None)
  1. s:被注释内容
  2. xy:被注释的坐标点,二维元组形如[x,y]
  3. xytext:注释文本的坐标点,也是二维元组,默认与xy相同
  4. xycoords:被注释点的坐标系属性
  5. textcoords设置注释文本的坐标系属性
    annotate(r'$sin(\frac{2\pi}{3})'=\frac{\sqrt{3}}{2}$',xy=(t,np.sin(t)),xycoords='data',xytext=(+10,+30),textcoords='offset points')
    

    看过李师哥的备课后的补充

    构建画框的骨架的两种方法:

    fig = plt.figure()
    ax = fig.add_axes([0.1,0.1,0.8,0.8])
    fig = plt.figure()
    ax = gca()//初始化四个轴
    left = bottom = 0.1
    right = top = 0.8
    ls = [left,bottom,right,top]
    for i in ls:
    ax.spines[top].set_position(i)

子图的划分

  1. 如果两个图片的x轴的范围不同的情况下,放在同一张画布下是不易显示的

    格式一

    figure = plt.figure()
    plt.subplot(nrows,ncols,plot_number)
  2. 其中nrows表示要划分的行数
  3. ncols表示要划分的列数
  4. plot_number表示当前的子图区
    from pylab import *
    x = []
    y = []
    figure = figure((m,n),dpi)//创建一个m*n点的图像
    axes1 = figure.add_subplot(2,1,1)//划分为两行,将第一行作为当前需要描绘的子图区
    plot(x,y)
    x = []
    y = []
    axes2 = figure.add_subplot(2,1,2)//选取第二块子图区
    plot(x,y)
    show()

plt.rcParams属性总结

  1. plt使用rc配置文件;来自定义图形的各种观点默认属性,称之为rc配置或rc参数,通过rc参数可以修改默认的属性,包括窗体大小,每英寸的点数,线条宽度,颜色,样式,坐标轴坐标,网络属性,文本,字体
  2. plt.rcParams[‘font.sans-serif’] = ‘SimHei’设置字体
  3. plt.rcParams[‘axes.unicode_minus’] = False字符显示:减号使用unicode编码而不是连字符号

设置中文字体:

  1. plt.rcParams[‘font.san-serif’]=[‘SimHei’]:SimHei是设置字体为黑体
  2. plt.rcParams[‘axes.unicode_minus’] = False设置字符显示
  3. 这个地方的unicode_minus我的理解为减去unicode即为不使用Unicode编码
  4. 如果设置为false,则负负得正,使用Unicode编码

    获取用户配置路径

    import matplotlib
    matplotlib.get_gonfigdir()

获取用户当前使用配置文件的路径

import matplotlib
matplotlib.matplotlib_fname()

查看rc参数的方法与rc参数的使用

  1. 查看:

    import matplotlib as mpl
    print(mpl.rcParams)
  2. 修改:(用中括号去取下标)

    import matplotlib
    matplotlib.rcParams['具体参数名称'] = xxx
  3. 通过matplotlib.rc一次设置多个参数

    import matplotlib
    matplotlib.rc('lines',linewidth=2,color='red')
  4. rc参数说明:

    lines.linewidth:线宽
    lines.linestyle:线的风格
    lines.color:线的颜色
    lines.marker:None 默认标记
    lines.markersize:标记大小
    lines.antialiased:True 使用抗锯齿渲染:没有缺口

    rc参数字体属性:

  5. font.family

  6. font.style:normal(roman),italic,oblique

  7. font.variant:normal,small-caps

  8. font.weight:normal,bold,bolder,lighter,100,200,300…900

  9. font.stretch

  10. font.size:默认字体大小,以磅为单位

  11. 网格:

    grid.color:网格颜色
    grid.linestyle:点
    grid.linewidth:pt

    具体参数详见博客地址

    https://www.cnblogs.com/shuaishuaidefeizhu/p/14035247.html

思路

  1. 引入matpoltlib库
  2. 创建一个图作为背景figure
  3. x轴坐标,y轴坐标
  4. plot绘制曲线
  5. 设置横轴上下限xlim
  6. 设置横轴记号和纵轴记号
  7. 保存图片savefig
  8. 在屏幕上显示show

正弦函数图像

from pylab import *
figure(figsize=(8,6),dpi=80)
x = np.linspace(-np.pi,np.pi,256,endpoint=True)
y = np.sin(x)
plot(x,y,color='blue',linewidth='10',linestyle='-')
xlim(-4.0,4.0)
ylim(-1.0,1.0)
xticks(np.linspace(-4,4,9,endpoint=True))
yticks(np.linspace(-1.0,1.0,3,endpoint=True))
ax = gca()
ax.spines['right'].set_color('None')
ax.spines['top'].set_color('None')
ax.spines['bottom'].set_position(('axes',0.5))
ax.spines['left'].set_position(('axes',0.5))
show()

二次曲线图像

from pylab import *
from numpy import *
x = np.linspace(-1,1,66,endpoint=True)

y = x**2
plot(x,y,linestyle='-',lw='10',color='blue')

show()

正余弦函数图像

from pylab import *
fig = figure(figsize=(8,6),dpi=80)#dpi参数是分辨率
fig.add_axes([0.1,0.1,0.8,0.8])

subplot(1,1,1)#创建一个1*1子图,接下来图样的绘制在第一块

x = np.linspace(-np.pi,np.pi,256,endpoint=True)
c,s = np.cos(x),np.sin(x)
plot(x,c,color="blue",linewidth=1.0,linestyle="solid",label="cosine")

plot(x,s,color="green",linewidth=1.0,linestyle="dotted",label="sine")

legend(loc='upper left',fontsize="18")
xlim(-4.0,4.0)

lis = ([-np.pi,-np.pi/2.0,0,np.pi/2.0,np.pi])

#xticks(np.linspace(-4,4,9,endpoint=True))

ylim(-1.0,1.0)
#yticks(np.linspace(-4,4,9,endpoint=True))
#xticks(lis)
xticks(lis,[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$-\pi$',r'$-\pi$'])#r表示不需要转义,raw(生的),LATEX用法,python中使用latex,需要在文本的后面加上$,\pi会转义为pi
yticks(lis)

ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('axes',0.5))
ax.spines['left'].set_position(('axes',0.5))

t = 2*np.pi/3
plot([t,t],[0,np.cos(t)],color='blue',linewidth=2.5,linestyle='--')
scatter([t,],[np.cos(t),],50,color='blue')

t = 2*np.pi/3
plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
scatter([t,],[np.cos(t),], 50, color ='blue')

annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
         xy=(t, np.sin(t)), xycoords='data',
         xytext=(+10, +30), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
scatter([t,],[np.sin(t),], 50, color ='red')

annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
         xy=(t, np.cos(t)), xycoords='data',
         xytext=(-90, -50), textcoords='offset points', fontsize=16,
         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

show()

将一个figure对象划分为6个子图,分别绘制不同的曲线,不同的颜色和标记的线条

from pylab import *
x = [1,2,3,4,5,6]
y = [3,5,7,1,9,12]
figure = figure(figsize=(8,6),dpi = 80)
axes1 = figure.add_subplot(2,3,1)
axes2 = figure.add_subplot(2,3,2)
axes3 = figure.add_subplot(2,3,3)
axes4 = figure.add_subplot(2,3,4)
axes5 = figure.add_subplot(2,3,5)
axes6 = figure.add_subplot(2,3,6)
axes1.plot(x,y,'ro')
axes2.plot(x,y,'r-*')
axes3.plot(x,y,'bs')
axes4.plot(x,y,'^g-.')
axes5.plot(x,y,'m8')
axes6.plot(x,y,'yd:')
show()
  1. plot中的线条的线性,标记的符号和线条的颜色参数的前后位置没有要求

条形图

特点:

  1. 在条形图中可以非常直观地通过位置比较比较数值大小,因为在条形图中条的高度就是数值,所以一眼就可以看出数值的高度

函数

bar(x,height,width,bottom)

参数:

  1. (x,height)定义在什么位置上,多高的bar(这个地方的高度其实是条形图的宽度,因为是躺着的,所以叫高度)

  2. width定义bar的宽度(这个地方的宽度是条形图的高度,因为是躺着的,座椅叫做宽度)

  3. bottom定义bar的实际高度(我的理解是bar的实际底在哪里)

    默认参数:

  4. height:柱子的高度,y轴上的坐标

  5. width:柱子的宽度,默认值是0.8

  6. bottom:柱子的基准高度,浮点数或者类数组结构,默认值为0

  7. bar orientation:给定的是一个向量,该向量指定单元局部坐标系的纵轴方向

    条形图实例

    from pylab import *
    x = [1,2,3,4,5,6]
    y = [2,3,54,6,7,4]
    figure = figure(figsize=(8,6),dpi = 80)
    bar(x,y)
    show()

    横向条形图实例

    from pylab import *
    x = [1,2,3,4,5,6]
    y = [3,5,1,7,9,12]
    #x指定其实位置从0开始,bottom指定水平条其实位置为左侧,height指定绘图的水平条的宽度,width指定绘制的水平条的长度,orientation指定要绘制的是水平条,color指定颜色
    bar(x=0,bottom=y,height=0.3,width=x,orientation='horizontal',color='red')
    show()

    注意重叠问题:

  8. 在绘制多组条形图进行对比时需要注意一点,bar_width的范围是(0,1)没错,但是多组图表需要保证几组图表的范围之和不超过1(范围之和!和!!和!!!)

    ```
    
    ## 2022/11再复习
    
    1.   导入包
    
    2.   ```python
         import matplotlib.pyplot as plt
         import numpy as np
  9. 划分数据,从哪到哪平均分为几份,使用numpy库中的linespace函数

  10. ```python
    x = np.linespace(-1,1,50)

    
    5.   新建图表
    
    6.   ```python
         plt.figure(num=1,figsize=(8,5),dpi=10)
         # figsize用来设置图像大小
         # num用来设置图像是第几个,编号为几
  11. 设置坐标轴的范围,matplotlib库中的xlim和ylim函数,x-limit和y-limit

  12. ```python
    plt.xlim((-1,2))
    plt.ylim((-2,3))

    
    9.   设置坐标轴上单位的小标
    
    10.   ```python
        # 设置单位的小标
        new_ticks = np.linspace(-1,2,5)
        plt.xticks(new_ticks)
        plt.yticks([-2,-1.8,-1,1.22,3],
                   [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])
  13. 设置x轴和y轴的名字,matplotlib库中的xlabel和ylabel

  14. ```python
    plt.xlabel(‘i am x’)
    plt.ylabel(‘i am y’)

    
    13.   设置单位的小标,使用xticks和yticks来设置横坐标和纵坐标
    
    14.   ```python
          new_ticks = np.linspace(-1,2,5)
          plt.xticks(new_ticks)
  15. gca = ‘get current axis’

  16. ```python
    ax = plt.gca()

    将右边和上边的坐标轴颜色设置为空,不显示

    ax.spines[‘right’].set_color(‘none’)
    ax.spines[‘top’].set_color(‘none’)

    将x轴设置为底部bottom,将y轴设置为顶部top

    ax.xaxis.set_ticks_position(‘bottom’)
    ax.xaxis.set_ticks_position(‘left’)

    将x轴和y轴(底轴和左轴的位置设置为坐标原点)

    ax.spines[‘bottom’].set_position((‘data’,0))
    ax.spines[‘left’].set_position((‘data’,0))

    
    17.   添加legend图例
    
    18.   ```
          l1 = plt.plot(x,y2,label='注记名称') # x,y2用来选择某条线
          l2 = plt.plot(x,y1,label='注记名称') # 前两个参数可以确定某条线
          #legend函数用来画出图例
          plt.legend()
          # 其中loc=''参数默认是best,会自动选择不会挡住图像的最佳位置
          # labels=['1','2'] 图像标注会覆盖掉plt.plot函数中的label
          # handles=[]参数会选择要画的线,其中画的线由plt.plot函数赋值
  17. 添加Annotation标注,特别标注某个点并给出文字

  18. ```python
    x0 = 1
    y0 = 2 * x0 + 1
    plt.Scatter(x0,y0,s=50,color=’blue’) # Scatter用来画出点,s用来设置Scatter.size,color用来设置颜色
    plt.plot([x0,x0],[y0,0],’k–’,lw=2.5) # [从.x,到.x][从.y,到.y]

    
    22.   ```python
          import matplotlib.pyplot as plt
          import numpy as np
          
          x = np.linspace(-1,1,50)
          
          y1 = 2*x + 1
          y2 = x**2
          
          plt.figure()
          # 设置坐标轴的范围
          plt.xlim((-1,2))
          plt.ylim((-2,3))
          
          # 设置x轴和y轴的名字
          plt.xlabel('i am x')
          plt.ylabel('i am y')
          
          # 设置单位的小标
          new_ticks = np.linspace(-1,2,5)
          plt.xticks(new_ticks)
          plt.yticks([-2,-1.8,-1,1.22,3],
                     [r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])
          
          plt.plot(x,y1)
          plt.plot(x,y2)
          
          ax = plt.gca()
          ax.spines['right'].set_color('none')
          ax.spines['top'].set_color('none')
          
          ax.xaxis.set_ticks_position('bottom')
          ax.yaxis.set_ticks_position('left')
          
          ax.spines['bottom'].set_position(('data',0))
          ax.spines['top'].set_position(('data',0))
          
          # 添加legend图例
          plt.plot(x,y1,label='2*x+1')
          plt.plot(x,y2,label='x**2')
          plt.legend()
          
          plt.show()

numpy数组

  1. numpy用于处理数组,对象称为ndarray
  2. 可以用array()函数创建一个numpy ndarray对象
arr = np array([1,2,3,4,5])
print(arr)
print(type(arr))

numpy和list的区别:

  1. 内存大小–numpy数据结构占用的内存空间更小
  2. 性能–numpy底层是用c写的,比列表更快
  3. 运算方法–内置优化了代数运算等方法

np.linspace函数

from pylab import *
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
c,s = np.cos(x),np.sin(x)
  1. linspace函数:指定的间隔内返回均匀间隔的数字
  2. endpoint:bool类型,如果为true则包含stop,否则不包含stop(结尾点)

参数:

  1. start:序列的起始点
  2. end:序列的终止点,如果endpoint设置为true,则包含最后一个点(全闭区间)
  3. num:生成的样本数,默认是50,必须为非负

网上的大部分解释

  1. pyplot:方便快速绘图,matplotlib通过pyplot模块提供了与一套和MATLAB类似的绘图API,将众多绘图对象构成的复杂结构隐藏在这套API内部
    2, pylab:matplotlib还提供了一个名为pylab的模块,其中包含许多Numpy和pyplot模块中常用的函数

作用:

  1. pylab = pyplot+大部分numpy
  2. 也就是说pylab只是提供了一个方便的导入常用包的接口

和matlab的区别:

  1. 在matlab中,画了一条线以后,如果想接着画另一条线,则需要hold on函数
  2. python中直接画即可