Matplotlib 介绍

Matplotlib 是一个数据可视化工具包,是一个 python 的 2D绘图库,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

安装方法:pip install matplotlib

引用方法:from matplotlib import pyplot as plt

绘图函数:plt.plot()

显示图像:plt.show()

plot 函数 绘制点和线图

  • 线型linestyle: (-, -. , --, ..)
  • 点型marker: (v, ^, s, *, H,+,x,D,o,...)
  • 颜色color: (b,g,r,y,k,w....) 可使用简写也可使用全称
  • label: 当前绘制的线的名称
  • linewidth: line的宽度

plot 函数设置图片相关属性

  • 设置图像标题: plt.title()
  • 设置X轴名称: plt.xlabel()
  • 设置Y轴名称: plt.ylabel()
  • 设置X轴范围: plt.xlim()
  • 设置Y轴范围: plt.ylim()
  • 设置X轴刻度: plt.xticks()
  • 设置Y轴刻度: plt.yticks()
  • 设置图例: plt.legend()
  • 指定轴的视口: plt.axis(xmin, xmax, ymin, ymax)

示例1 简单运用

plt.plot([1,2,3,4], [5,3,7,9], 'o-r', label='Line A')
plt.plot([2,3,4, 5], [4,5,8,10], linestyle='-.', marker='*', color='b', label='Line b')
plt.title('Matplotlib Test')  #  设置
plt.xlabel('Xlabel')
plt.ylabel('Ylabel')
plt.xlim(0,5)
plt.ylim(0, 10)
plt.legend()
plt.show()
示例1.png

示例2 绘制数学函数图像

  • y=x
  • y=x^2
  • y = sin(x)
# x = np.linspace(-100, 100, 10000)
x = np.arange(0,  3  * np.pi,  0.1) 
y1 = x
y2 = 2*x+1
y3 = np.sin(x)

plt.plot(x, y1, color='red', label='y=x')
plt.plot(x, y2, color='blue', label='y=x^2')
plt.plot(x, y3, color='yellow', label='y=sin(x)')
plt.legend()
plt.xlabel('Xlabel')
plt.ylabel('Ylabel')
plt.show()
示例2.png
plt.pie(x=[10, 20, 30, 40], colors=['r','y','b','g'], labels = ['A','B','C','D'],explode = (0,0,0.1,0))
plt.axis('equal')  # 保证饼图为圆
plt.show()
饼图.png

Matplotlib 画布

画布:figure对象

  • fig = plt.figure()
  • 常用参数:
    • num:如果未提供,将创建一个新的figure,并且figure编号递增。figure对象将该数字保存在number 属性中。如果提供了num,并且已经存在具有此ID的figure,则将其激活,并返回对其的引用。如果该figure不存在,将创建它并返回它.
    • figsize: (float,float),可选,默认:无
      宽度,高度(以英寸为单位)。如果未提供,则默认为 [6.4, 4.8]

在画布上面添加子图

  • ax = fig.add_subplot(2,2,1)

调整子图间距

  • subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
    有六个可选参数来控制子图布局。值均为0~1之间。其中left、bottom、right、top围成的区域就是子图的区域。wspace、hspace分别表示子图之间左右、上下的间距

  • left, right, bottom, top:子图所在区域的边界。
    当值大于1.0的时候子图会超出figure的边界从而显示不全;值不大于1.0的时候,子图会自动分布在一个矩形区域(下图灰色部分)
    要保证left < right, bottom < top,否则会报错。


    adjust_plots.png
  • wspace, hspace:子图之间的横向和纵向间距。
    无论如何所有子图都不会超出left, right, top, bottom所围区域。子图的长宽比不变,而是按比例缩小,所以调整横向间距也可能影响纵向间距,反之亦然。


    adjust_plots2.png

示例

fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax1.plot([1,2,3,4], [5,3,7,9], color='red')
ax2.plot([2,3,4, 5], [4,5,8,10], color='blue')
ax3.plot([3,6,4, 5], [7,6,9,8], color='black')
fig.subplots_adjust(
top = 0.98, bottom = 0.07, right = 0.98, left = 0.08, hspace = 0.3, wspace = 0.3)
# fig.show()
plt.show()

也可以写成下面这

fig = plt.figure()
ax1 = plt.subplot(2,2,1)
ax2 = plt.subplot(2,2,2)
ax3 = plt.subplot(2,2,3)
ax1.plot([1,2,3,4], [5,3,7,9], color='red')
ax2.plot([2,3,4, 5], [4,5,8,10], color='blue')
ax3.plot([3,6,4, 5], [7,6,9,8], color='black')
fig.subplots_adjust(
top = 0.98, bottom = 0.07, right = 0.98, left = 0.08, hspace = 0.3, wspace = 0.3)
# fig.show()
plt.show()
画布.png

使用 plt.subplots() 创建一个图和一组子图。

可以使用单个功能来创建一个图形,该图形具有仅一行代码的多个子图,例如,下面的代码将返回既是fig图形对象又axes是2x3的轴对象数组,这使您可以轻松访问每个子图

fig, axes = plt.subplots(nrows=2, ncols=3)

相反,matplotlib.pyplot.subplot()在指定的网格位置仅创建单个子图轴。这意味着将需要多行代码来实现与matplot.pyplot.subplots()在上述单行代码中所做的相同的结果:

# first you have to make the figure
fig = plt.figure(1)

# now you have to create each subplot individually
ax1 = plt.subplot(231)
ax2 = plt.subplot(232)
ax3 = plt.subplot(233)
ax4 = plt.subplot(234)
ax5 = plt.subplot(235)
ax6 = plt.subplot(236)

fig, axes = plt.subplots(23):即表示一次性在figure上创建成23的网格,使用plt.subplot()只能一个一个的添加[引用来源]:*

使用关键字字符串绘图

在某些情况下,您可以使用允许您使用字符串访问特定变量的格式的数据

Matplotlib允许您使用data关键字参数提供此类对象。如果提供,那么您可以生成包含与这些变量对应的字符串的图。

data = {'a': np.arange(50),
        'c': np.random.randint(0, 50, 50),
        'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100

plt.scatter('a', 'b', c='c', s='d', data=data)  # 散点图
plt.xlabel('entry a')
plt.ylabel('entry b')
plt.show()

使用多个图形和轴

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure(1)
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()
多个图形和轴.png

这里的 figure() 命令是可选的,因为默认情况下将创建 figure(1),就像默认情况下创建 subplot(111) 一样,如果不手动指定任何轴。subplot()命令指定numrows, numcols, plot_number,其中 plot_number 的范围 从1到numrows*numcols。如果 numrows * numcols <10,则subplot命令中的逗号是可选的。因此 subplot(211)subplot(2, 1, 1) 相同。

你可能感兴趣的:(Matplotlib 介绍)