Matplotlib-Python学习笔记

教程来源:https://www.bilibili.com/video/BV1Jx411L7LU

1 基本用法

1.1 画图初体验

基本用法跟matlab一样,参考以下代码:

import matplotlib.pyplot as plt  # 通常不会用到matplotlib的所有包,只需要plt即可
import numpy as np

x = np.linspace(-1,1,50)
y = 2 * x + 1
plt.plot(x,y)
plt.show()  # 用这个函数画的图才会显示出来

结果:
在这里插入图片描述

1.2 figure图像

目标

  1. 两个figure分别画图
  2. 自定义figure的名称及尺寸
  3. 同一个figure上画不同的曲线
  4. 自定义曲线的颜色,线宽,线形

代码

import matplotlib.pyplot as plt  # 通常不会用到matplotlib的所有包,只需要plt即可
import numpy as np

x = np.linspace(-1,1,50)
y1 = 2 * x + 1
y2 = x ** 2

plt.figure()
plt.plot(x,y1)

plt.figure(num=3,figsize=(8,5))
plt.plot(x,y2)
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')

plt.show()  # 用这个函数画的图才会显示出来

结果
在这里插入图片描述

补充:实测跟Matlab中的plot指令基本通用,可以直接用

1.3 设置坐标轴(一)

目标

  1. 设置横纵坐标的范围
  2. 设置横纵坐标轴的标签
  3. 设置横纵坐标轴的刻度
  4. 设置横纵坐标轴的刻度值
  5. 使用正则表达式输出Latex文本

代码

import matplotlib.pyplot as plt  # 通常不会用到matplotlib的所有包,只需要plt即可
import numpy as np

x = np.linspace(-3,3,50)
y1 = 2 * x + 1
y2 = x ** 2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')

# 1. 设置横纵坐标的范围
plt.xlim((-1,2))  # 注意:这里范围需要再用一个括号括起来
plt.ylim((-2,3))

# 2. 设置横纵坐标轴的标签
plt.xlabel('I am x')
plt.ylabel('I am Y')

# 3. 设置横纵坐标轴的刻度
new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks)

# 4. 设置横纵坐标轴的刻度值
# 5. 使用正则表达式输出Latex文本
plt.yticks([-2,-1.5,-1,1.22,3],
            ['really bad', r'$bad$','normal',r'$good$','$really\ good$'])

plt.show()  # 用这个函数画的图才会显示出来

结果
在这里插入图片描述
注意

  • 最后r''为正则表达式,暂不清楚是干嘛的
  • $ $表示中间为Latex格式
  • 在Latex中,想要打出空格需要用转义字符\+空格,可以看“really good”中间的空格

1.4 设置坐标轴(二)

目标

  • 获取到图片的四个边框(四个轴)
  • 让上方和右边的边框/轴消失
  • 将下方的边框/轴的位置往上平移

有些复杂,用不太着,先跳过

1.5 Legend图例

  • 在plot的时候,可以使用

    plt.plot(x,y,label='XXX')
    plt.legend()
    

    其中,label所输入的数就是图例中显示的名称

  • 或者使用legend规定更详细的要求

    plt.legend(handles=[l1,l2,],labels=['aaa','bbb',],loc='upper right')
    

    其中:

    • loc表示图例出现的位置,可以选择的选项有“best”,其他竖直方向为“upper”,“center”,“lower”,水平方向为“left”,“center”,“right”,进行组合
    • handles表示在图例中是否显示相应的线型,使用之前需要确保plot是一下语句形式:
      l1,= plt.plot(x1,y1,label='XXX')
      l2,= plt.plot(x2,y2,label='XXX')
      
      注意以上语句中的,以及handles=[l1,l2,]中最后的逗号
    • labels表示图例的文本,如果前面的plot语句中也有文本,以这里为准。

实测使用时不需要这么麻烦,如果只想规定图例的文本,可以直接:
plt.legend(['aaa','bbb'])
如果还想规定位置,则
plt.legend(['aaa','bbb'],loc='upper right')

代码:上面的代码改进,只看最后几行图例的即可

import matplotlib.pyplot as plt  # 通常不会用到matplotlib的所有包,只需要plt即可
import numpy as np

x = np.linspace(-3,3,50)
y1 = 2 * x + 1
y2 = x ** 2

plt.figure()
plt.plot(x,y2,label='function1')
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--',label='function2')

# 1. 设置横纵坐标的范围
plt.xlim((-1,2))  # 注意:这里范围需要再用一个括号括起来
plt.ylim((-2,3))

# 2. 设置横纵坐标轴的标签
plt.xlabel('I am x')
plt.ylabel('I am Y')

# 3. 设置横纵坐标轴的刻度
new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks)

# 4. 设置横纵坐标轴的刻度值
# 5. 使用正则表达式输出Latex文本
plt.yticks([-2,-1.5,-1,1.22,3],
            ['really bad', r'$bad$','normal',r'$good$','$really\ good$'])

plt.legend(['aaa','bbb'],loc='best')

plt.show()  # 用这个函数画的图才会显示出来

结果
在这里插入图片描述

1.6 Annotation标注

要实现的效果:
在这里插入图片描述
使用的命令:

plt.annotate()

plt.text()

具体使用方法可再查阅,这里不详细展开

2 绘制不同类型的图

2.1 Scatter散点图

语法

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
	vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, 
	plotnonfinite=False, data=None, **kwargs)

示例代码

import matplotlib.pyplot as plt  # 通常不会用到matplotlib的所有包,只需要plt即可
import numpy as np

# 随机生成X,Y坐标
n = 1024 #规定点数
X = np.random.normal(0,1,n) #随机生成n个点,以正态分布,均值为0,标准差为1
Y = np.random.normal(0,1,n)

T = np.arctan2(Y,X)  # 在颜色地图上找到对应的颜色

plt.scatter(X,Y,s=75,c=T,alpha=0.5)

plt.xlim((-1.5,1.5))
plt.ylim((-1.5,1.5))

plt.xticks(())  #取消坐标轴上的标尺显示
plt.yticks(())

plt.show()  # 用这个函数画的图才会显示出来

结果
在这里插入图片描述

2.2 Bar柱状图

先跳过

2.3 Contours等高线图

2.3.1 没有轮廓线的等高线图(颜色填充图)

语法:没有轮廓线的等高线图

contourf([X, Y,] Z, [levels], **kwargs)

其中

  • [X, Y]:等高线图的横纵坐标,可以通过numpy.meshgrid()生成
  • Z:等高线图的高度
  • [levels]:等高线分成几个层级,如果是0,则只有一条等高线分成两部分
  • 其他参数包括:
    • colors
    • alpha:透明度
    • cmap:色彩映射表,默认为viridis,如果同时给出了colorscmap,会报错
    • norm:可选项,如果使用色彩映射表,‎‎则 Normalize‎‎ 实例会将级别值缩放到规范色彩映射表范围 [0, 1],以便映射到颜色。如果未给出,则使用默认线性缩放。
    • vmin, vmax:可选项,‎如果不是 ‎‎None‎‎,则这些值中的一个或两个都将提供给‎‎归一化‎‎实例,并覆盖基于‎‎[levels]的‎‎默认色阶。‎
    • 其他参见https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contourf.html

代码:(两种方式,用cmap和colors)

import matplotlib.pyplot as plt  # 通常不会用到matplotlib的所有包,只需要plt即可
import numpy as np

def f(x, y):
    return (1 - x /2 + x**5 + y**3) * np.exp(-x**2 - y**2)

n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
[X,Y] = np.meshgrid(x,y)

# 用cmap
# plt.contourf(X,Y,f(X,Y),
#             levels = 8,
#             alpha=0.75,
#             cmap = plt.cm.viridis)

# 用colors
plt.contourf(X,Y,f(X,Y),
            colors = ['red','blue','green','yellow'],
            levels = 8,
            alpha=0.75)
plt.colorbar()

plt.xticks(())  #取消坐标轴上的标尺显示
plt.yticks(())

plt.show()  # 用这个函数画的图才会显示出来

结果
cmap的结果:
在这里插入图片描述
colors结果:
[]里面有几个颜色,就会按照顺序使用相应的颜色)
在这里插入图片描述

2.3.2 有轮廓线的等高线图(纯线图)

语法:等高线图的轮廓线

contour([X, Y,] Z, [levels], **kwargs)

函数各参数同contourf()中的各个参数,本函数特有的参数主要是关于线的属性

代码:(也是cmapcolors的两种函数,只是上面的代码把contourf()改成了contour()

import matplotlib.pyplot as plt  # 通常不会用到matplotlib的所有包,只需要plt即可
import numpy as np

def f(x, y):
    return (1 - x /2 + x**5 + y**3) * np.exp(-x**2 - y**2)

n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
[X,Y] = np.meshgrid(x,y)

# 用cmap
# plt.contour(X,Y,f(X,Y),
#             levels = 8,
#             alpha=0.75,
#             cmap = plt.cm.viridis)

# 用colors
plt.contour(X,Y,f(X,Y),
            colors = ['red','blue','green','yellow'],
            levels = 8,
            alpha=0.75)

plt.colorbar()

plt.xticks(())  #取消坐标轴上的标尺显示
plt.yticks(())

plt.show()  # 用这个函数画的图才会显示出来

结果
cmap的结果:
在这里插入图片描述

colors的结果:
在这里插入图片描述

2.3.3 只画部分轮廓线

如果想要之画出指定高度的轮廓线,在上面代码的基础上contour()函数做出如下改进
代码:只画规定高度的轮廓线(只画一条的时候,把plt.colorbar()关掉)

plt.contour(X,Y,f(X,Y),[0.4,0.8],  #[]里面写出想要的高度
            colors = 'red',
            alpha=0.75)

结果
在这里插入图片描述

2.3.4 在轮廓线上注释出高度

想要在轮廓上进行注释,在画轮廓的时候,需要给contour()赋值:

CS = contour()

语法:轮廓线上的图注

clabel(CS, levels=None, **kwargs)

其中

代码

import matplotlib.pyplot as plt  # 通常不会用到matplotlib的所有包,只需要plt即可
import numpy as np

def f(x, y):
    return (1 - x /2 + x**5 + y**3) * np.exp(-x**2 - y**2)

n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
[X,Y] = np.meshgrid(x,y)

# 用cmap
plt.contourf(X,Y,f(X,Y),
            levels = 8,
            alpha=0.75,
            cmap = plt.cm.viridis)
plt.colorbar()

# 用colors
C = plt.contour(X,Y,f(X,Y),
            levels = 8,
            colors = 'black',
            linewidths = 1.0,
            alpha=0.75)

plt.clabel(C,colors = 'red', inline = True)


plt.xticks(())  #取消坐标轴上的标尺显示
plt.yticks(())

plt.show()  # 用这个函数画的图才会显示出来

结果
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dreautumn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值