Matplotlib 入门指南

文章目录

基本用法

Matplotlib 入门指南

import matplotlib.pyplot as plt
import numpy as np

# 横坐标 [-1,1] 划分 50 个
x = np.linspace(-1,1,50)
y = 2 * x + 1

plt.plot(x,y)
plt.show()

Figure图像

Matplotlib 入门指南

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-10, 10, 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()

坐标轴设置

Matplotlib 入门指南

# 坐标轴范围
plt.xlim((-1,2))
plt.ylim((-2,3))

# 坐标轴描述
plt.xlabel("X")
plt.ylabel("Y")

# 坐标轴单位 - 设置英文字体 - 希腊字母
plt.xticks(np.linspace(-1,2,5))
plt.yticks([-2,0,2],[r'$good$',r'$midle\ score$',r'$bad$'])

# 坐标轴边框及原点
ax = plt.gca()

# 消失边框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 设置x,y坐标轴
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

# 移动x,y轴
ax.spines['bottom'].set_position(('data', -1))
ax.spines['left'].set_position(('data', 0))

Legend图例

Matplotlib 入门指南

# 设置legend
l1, = plt.plot(x, y2)
l2, = plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
plt.legend(handles=[l1,l2], labels=['up','down'], loc='best')

Annotation标注

Matplotlib 入门指南

# Annotation标注
# 方法一
x0 = 1
y0 = 2 * x0 + 1
plt.scatter(x0, y0, s=50, color='r')
plt.plot([x0, x0], [y0, 0], 'r--', lw=2)

# 方法二
plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data',
             xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))

# 方法三
plt.text(-3,3,r'$This\ is\ a\ test\ \sigma_t\ .$',fontdict={'size':16,'color':'r'})

Tick 能见度

Matplotlib 入门指南

# Tick 能见度
for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor='red', edgecolor='None', alpha=0.5))

Scatter散点图

Matplotlib 入门指南

# 构造数据范围
n = 1024
X = np.random.normal(0, 1, n)
Y = np.random.normal(0, 1, n)
T = np.arctan2(Y, X)  # for color value

# 绘制散点图
plt.scatter(X, Y, s=75, c=T, alpha=0.5)
plt.scatter(np.arange(5), np.arange(5), c='red')

# 坐标轴范围
plt.xlim((-1.5, 1.5))
plt.ylim((-1.5, 1.5))

# 隐藏 x,y 的 ticks
plt.xticks(())
plt.yticks(())

Bar柱状图

Matplotlib 入门指南

# 构造数据范围
n = 12
X = np.arange(n)
Y1 = (1-X/float(n)*np.random.uniform(0.5, 1.0, n))
Y2 = (1-X/float(n)*np.random.uniform(0.5, 1.0, n))

# 绘制柱状图
plt.bar(X, +Y1, facecolor='blue', edgecolor='white')
plt.bar(X, -Y2, facecolor='pink', edgecolor='white')

# 加上文字描述
for x, y in zip(X, Y1):
    plt.text(x, y+0.05, '-%.2f' % y, ha='center', va='bottom')

for x, y in zip(X, Y2):
    plt.text(x, -y-0.05, '%.2f' % y, ha='center', va='top')

Contours等高线图

Matplotlib 入门指南

# 构造数据范围
def height(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)

# 绘制等高图
plt.contourf(X, Y, height(X, Y), 8, alpha=0.75, cmap=plt.cm.cool)

# 绘制等高线
C = plt.contour(X, Y, height(X, Y), 8, color='black', linewidth=.5)

# 加上文字
plt.clabel(C, inline=True, fontsize=10)

Image图片

Matplotlib 入门指南

# 图片数据
a = np.array([0.313, 0.365, 0.423, 0.365, 0.439,
             0.525, 0.423, 0.525, 0.651]).reshape(3, 3)

# Image 图片
plt.imshow(a, interpolation='none', cmap='bone', origin='upper')

# 显示 bar
plt.colorbar(shrink=0.8)

3D 数据

Matplotlib 入门指南

# 设置 3D 画布
fig = plt.figure()
ax = Axes3D(fig)

# 构造数据范围
X = np.arange(-4, 4, 0.5)
Y = np.arange(-4, 4, 0.5)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# 绘制 3D
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')

# 绘制等高线
ax.contourf(X, Y, Z, zdir='x', offset=-4, cmap='rainbow')

# 设置 z 轴范围
ax.set_zlim(-2, 2)

Subplot 多合一

Matplotlib 入门指南

# 创建画布
plt.figure()

# 画布划分 2 行 1 列,取第一个位置
plt.subplot(2, 1, 1)
plt.plot([-1, 1], [-1, 1])

# 画布划分 2 行 3 列,取第四个位置
plt.subplot(2, 3, 4)
plt.plot([-1, 1], [-1, 1])

# 画布划分 2 行 3 列,取第五个位置
plt.subplot(2, 3, 5)
plt.plot([-1, 1], [-1, 1])

# 画布划分 2 行 3 列,取第六个位置
plt.subplot(2, 3, 6)
plt.plot([-1, 1], [-1, 1])

Subplot 分格显示

Matplotlib 入门指南

# 方法一
plt.figure()
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3, rowspan=1)
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2, rowspan=1)
ax3 = plt.subplot2grid((3, 3), (1, 2), colspan=1, rowspan=1)
ax3 = plt.subplot2grid((3, 3), (2, 0), colspan=3, rowspan=1)

# 方法二
plt.figure()
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :2])
ax3 = plt.subplot(gs[1:, 2])
ax4 = plt.subplot(gs[-1, 0])
ax5 = plt.subplot(gs[-1, -2])

# 方法三
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True, sharey=True)
ax1.plot()
ax2.plot()
ax3.plot()
ax4.plot()

Animation动画

Matplotlib 入门指南

# 定义两个区域
fig, ax = plt.subplots()

# 绘制 x
x = np.arange(0, 2*np.pi, 0.01)
line, = ax.plot(x, np.sin(x))

def animate(i):
    line.set_ydata(np.sin(x+i/100))
    return line,

def init():
    line.set_ydata(np.sin(x))
    return line,

# 动起来
ani = animation.FuncAnimation(
    fig, func=animate, frames=100, init_func=init, interval=20, blit=True)

微信关注『方糖算法』

各类面试资料、内推资源,关注微信公众号获取哦。
Matplotlib 入门指南

上一篇:9.彩色图像处理


下一篇:【swift学习笔记】四.swift使用Alamofire和swiftyJson