使用 Matplotlib 绘制 2D 和 3D 图形

1. 绘制2D图像

注意:如果在NoteBook环境下绘图时应该首先运行%matplotlib inline

1.1. 与MATLAB相似的用法

from matplotlib import pylab
import numpy as np
%matplotlib inline

x = np.linspace(0, 10, 20)				#构造数据
y = x * x + 2

pylab.subplot(1,2,1)		#绘制子图1,并指定以下语句是在此子图上绘制
pylab.plot(y,x,'g*-')			#这里的'g*-'是线条的属性设置,和MATLAB一致

pylab.subplot(1,2,2)		#子图2,以下绘制在子图2中
pylab.plot(y,x,'r--')

在这里插入图片描述

1.2. 面向对象的方法

from matplotlib import pyplot as plt
import numpy as np
%matplotlib inline

x = np.linspace(0, 10, 20)				#构造数据
y = x * x + 2

#------------------------------------方法 1:add_axes方法添加画布--------------------------

fig = plt.figure() # 新建图形对象,画板,图像的框架,可以通过 figsize=(14,6)指定画板尺寸

#add_axes参数的前两个表示坐标,后两个表示图像长和高,范围[0,1] 
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) 	#创建画布,即子图,此方法创建的子图可以重叠

#创建子图2
axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])

axes1.plot(x, y, 'r')
axes2.plot(y, x, 'g')

#------------------------------------方法三:使用 subplots() 添加画布--------------------------
#fig为画板对象,axes为画布对象列表
fig, axes = plt.subplots(nrows=1, ncols=2) # 子图为 1 行,2 列,参数可以直接写为(1,2)
for ax in axes:
    ax.plot(x, y, 'r')

#------------------------------------方法三:使用 add_subplot() 添加画布--------------------------
#													'''此方法与MATLAB方法相似'''

fig = plt.figure() 		# 新建图形对象

fig.add_subplot(1,2,1)

plt.plot(x, y, 'r')
fig.add_subplot(1,2,2)

plt.plot(x, y, 'g')

方法一:
方法一
方法二:
在这里插入图片描述
方法三:
在这里插入图片描述

1.3. 图的属性设置

  1. 图名称、坐标轴名称、图例
#1.设置标题
ax.set_title("title")

#2.设置坐标轴名称
ax.set_xlabel("x")
ax.set_ylabel("y")

#3. 设置图例,其中loc 参数标记图例位置1,2,3,4 
#依次代表:右上角、左上角、左下角,右下角;0 代表自适应
ax.legend(["label1", "label2"],loc=0)

  1. 画布网格、坐标轴范围
    使用画布方法
axes.grid(True)	#设置网格,默认为False

#设置坐标轴范围
axes.set_ylim([0, 60])
axes.set_xlim([2, 5])

  1. 线型、颜色、透明度、虚线交错宽度

    1. 方法一:
      颜色、线型、标记由三种符号组成:如 ‘r–^’ :红色、虚线、朝上三角标记。然后在指定其他参数
    ax.plot(x, x+1,  'r--^', lw=1)
    
    1. 方法二:
      全部由关键字传参
    ax.plot(x, x+16, color="purple", lw=1, ls='-', marker='s', markersize=8, 
        markerfacecolor="yellow", markeredgewidth=2, markeredgecolor="blue")
    
    1. plot()参数
    参数 描述
    color 颜色
    alpha 透明度
    linestyle ,ls 线型
    linewidth ,lw 线宽
    marker 线标记
    markersize,ms 标记大小
    markeredgewidth mew 标记边界宽度
    markerfacecolor ,mfc 标记内部颜色
    markeredgecolor, mec 标记边界颜色
    1. 线型:
    描述
    -’ 实线
    ‘–’ 线型虚线
    ‘-.’ 点划线 点线交错
    ‘:’ 点型虚线

    注意:虚线交错宽度设置

    line, = ax.plot(x, x+8, color="black", lw=1.50)
    line.set_dashes([5, 10, 15, 10]) #偶数个列表,每两个树为一个实线与虚线的交错宽度
    
    1. 线标记:
    符号 描述
    ‘.’ 点标记
    ‘,’ 像素标记
    ‘o’ 圆圈标记
    ‘v’ 朝下的三角形
    ‘^’ 朝上的三角形
    ‘<’ 朝左的三角形
    ‘>’ 朝右的三角形
    1-4 tri_down marker,up,left,right
    ‘s’ 正方形
    ‘p’ 五边形
    ‘*’ 星型
    ‘h’ 1号六角形
    ‘H’ 2号六角形
    ‘+’ +号标记
    ‘x’ x号标记
    ‘D’ 钻石形
    ‘d’ 小版钻石形
    ‘|’ 垂直线形
    ‘_’ 水平线行
    1. 颜色
    符号 描述
    ‘b’ 蓝色
    ‘g’ 绿色
    ‘r’ 红色
    ‘c’ 青色
    ‘m’ 品红
    ‘y’ 黄色
    ‘k’ 黑色
    ‘w’ 白色

    其中颜色可以由完整的英文名称、十六进制字符码(’#777777’)、RGB、RGBA元组(((0, 128, 64))),只有符号表示的可以用方法一格式化组合线的属性,其他需用关键字传参。

1.4. 其他二维图

  1. 绘制散点图、梯步图、条形图、面积图
"""绘制散点图、梯步图、条形图、面积图
"""
n = np.array([0,1,2,3,4,5])

fig, axes = plt.subplots(1, 4, figsize=(16,5))

axes[0].scatter(x, x + 0.25*np.random.randn(len(x)))
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")

在这里插入图片描述
2. 绘制直方图和累计直方图

"""绘制直方图
"""
n = np.random.randn(100000)
fig, axes = plt.subplots(1, 2, figsize=(12,4))

axes[0].hist(n)
axes[0].set_title("Default histogram")
axes[0].set_xlim((min(n), max(n)))

axes[1].hist(n, cumulative=True, bins=50)
axes[1].set_title("Cumulative detailed histogram")
axes[1].set_xlim((min(n), max(n)))

在这里插入图片描述

2. 绘制3D图

2.1. 在三维空间中绘制散点

from mpl_toolkits.mplot3d.axes3d import Axes3D

fig = plt.figure(figsize=(14,6))

# 通过 projection='3d' 指定绘制 3D 图形
ax = fig.add_subplot(1, 2, 1, projection='3d')
ax.scatter([1,2,3], [1,2,3], [1,2,3],c='r')			#分别对应三个坐标xyz,可以为单个数字表示单个坐标,可以为三个列表,表示多个坐标

2.2. 在三维空间中绘制连续图形

注意事项:

  1. 需要关联XY
    np.meshgrid(phi_p, phi_m)的作用是用对应的输入生成二维空间中的点。
from mpl_toolkits.mplot3d.axes3d import Axes3D

#数据生成
phi_m = np.linspace(0, 2*np.pi, 100)
phi_p = np.linspace(0, 2*np.pi, 100)
X,Y = np.meshgrid(phi_p, phi_m)
Z = flux_qubit_potential(X, Y).T

fig = plt.figure(figsize=(14,6))

# 通过 projection='3d' 指定绘制 3D 图形
ax = fig.add_subplot(1, 2, 1, projection='3d')
ax.plot_surface(X, Y, Z, rstride=4, cstride=4, linewidth=0)

猜你喜欢

转载自blog.csdn.net/qq_36881091/article/details/88358157