Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。
包括其基本的使用结构,配合numpy,加上基本使用方法。
# #开始
'''
# 基本结构为以下:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,50)
y = 2*x+1
plt.plot(x,y)
plt.show()
'''
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.figure(num=3, figsize=(8, 5)) # 一个plt.figure表示一张图(num:图上的数figure3)
plt.plot(x, y1)
# 一张图上多条线(也可plt.plot(x,y1,x,y2,x,y3))
plt.figure()
plt.plot(x, y2)
plt.plot(x, y1, color="red", linewidth=3, linestyle="--") # 图的特征(linewidth:线的宽度, linestyle:线的显示形式)
# x,y轴的范围
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, 10)
print(new_ticks)
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3],
["really bad", "bad", "normal", "good", "really good"])
# 改字体
'''plt.yticks([-2, -1.8, -1, 1.22, 3],
[r"$really\ bad$",r"$bad$",r"$normal$",r"$good$",r"$really\ good$"])'''
# \alpha_1 # 可以变成数学符号且加了下标
# 得到整张图
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)) # data这是个可变换类型(不确定)
ax.spines["left"].set_position(("data", -0.25)) # -0.25为在轴上点的坐标
plt.show()
指明图中的每条线代表什么。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.figure()
plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xlabel('I am x')
plt.ylabel('I am y')
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)
plt.plot(x, y1, label='up') # label='up'对线进行标注
plt.plot(x, y2, color='red', linewidth=1, linestyle='--', label='down')
plt.legend()
plt.show()
将数据以点的形式显示在图上。
其参数
x,y | 形如shape(n,)数组:输入数据 |
---|---|
用scatter方法绘制散点图
import matplotlib.pyplot as plt
import numpy as np
plt.figure(num=1)
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.figure(num=2)
plt.scatter(np.arange(10), np.arange(10))
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
y = np.arange(10)
plt.bar(x, y)
plt.xticks(color='none')
plt.yticks()
plt.show()
np.meshgrid(X, Y)说明:生成绘制3D图形所需的网格数据。在计算机中进行绘图操作时, 往往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x, y),meshgrid就是产生这样两个矩阵,来简化我们的操作。
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure() # 一张图
ax = Axes3D(fig) # 将此图变为立体样式
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y) # 用来产生坐标矩阵
# X, Y, Z = np.meshgrid(X, Y, Z) # 亦可
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)
# X,Y,Z数据均要有, rstride:行之间的跨度 cstride:列之间的跨度,cmap:控制三维曲面的颜色组合
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))
plt.show()
可以约束x,y上的范围
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 6, 0.25)
y = 1/3 * (x ** 3) - 2 * x
print(x)
plt.plot(x, y)
plt.xlim(-4, 4)
plt.ylim(-20, 20)
plt.show()
在图中一般不能直接使用汉语。
plt.title:标注题头方法
plt.annotate:图中进行标注方法
plt.grid:是否显示格方法
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(0, 5, 0.02) # 步长为0.02
plt.plot(a, np.cos(2 * np.pi * a), 'r--')
plt.xlabel('横轴:时间', fontproperties='SimHei', fontsize=20, color='green') # 设置字体大小,字体类型,字体颜色
plt.ylabel('纵轴:振幅', fontproperties='SimHei', fontsize=20)
plt.title(r'正弦波', fontsize=15, fontproperties='SimHei') # 题头
# plt.text(2,1,r'$\mu=100$', fontsize=15) # 在x = 2,y =1,的地方注释
plt.annotate(r'$\mu=100$', xy=(2, 1), xytext=(3, 1.5), arrowprops=dict(facecolor='black', width=2))
# xy为箭头指向,xytext(字体写的位置)
plt.axis([-1, 6, -2, 2]) # 标定范围==xlim,ylim(注意格式)
plt.grid(True) # 是否显示格
plt.show()
可以在图中画其他图形。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 3, 4, 2, 5, 8, 6]
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
ax1 = fig.add_axes([left, bottom, width, height]) # 注意数据格式
ax1.plot(x, y, color='blue')
left, bottom, width, height = 0.2, 0.6, 0.25, 0.25 # 按照各边占比,开始画小图
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(x, y, color='yellow')
left, bottom, width, height = 0.6, 0.2, 0.25, 0.25
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(x, y, color='red')
plt.show()