Python笔记:matplotlib库绘图功能简介

  • Python笔记:matplotlib库绘图功能简介
    • 1. matplotlib库是什么
    • 2. matplotlib基础用法
    • 3. 一些常用图表的绘制方法
      • 1. 统计图表绘制
        • 1. 直方图绘制
        • 2. 饼状图绘制
      • 2. 散点图 & 曲线绘制
        • 1. 散点图绘制
        • 2. 一般曲线绘制
      • 3. 图片属性设置
        • 1. 图片大小设置
        • 2. 坐标轴设置
        • 3. 网格设置
      • 4. 复杂图表绘制
        • 1. 同一张图中绘制多条曲线
        • 2. 以子图的方式绘制多条曲线
        • 3. 同一张图中设置双坐标系
        • 4. 在大图中绘制子图
    • 4. 参考链接

1. matplotlib库是什么

matplotlib是python中常用的一个绘图库,他的功能相当于matlab,基本上matlab上能实现的绘图功能都能够通过matplotlib库来在python中进行实现。

这里,我们就来简单地看一下如何使用matplotlib库来绘制一些常见的图。

2. matplotlib基础用法

matplotlib绘图使用的是其中的pyplot库,其核心思想包括以下几个步骤:

  1. 定一个画布;
  2. 在画布上绘制所需要展示的图表;
  3. 展示画布内容。

通常来说,对于一般的图表,第一个步骤往往是可以省略的,pyplot库在收到图表绘制命令的时候会自动创建一个默认画布,因此,一个最简单的图表绘制代码就可以表达为如下:

import numpy

x = numpy.linspace(0, 6.28, 100)
y = numpy.sin(x)

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

运行后即可得到下图:

Python笔记:matplotlib库绘图功能简介_第1张图片

更为规范一点的写法如下,两者的处理结果完全一致:

import numpy

x = numpy.linspace(0, 6.28, 100)
y = numpy.sin(x)

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

下面,我们来讨论一下一些典型的常用图表的绘制方法。

3. 一些常用图表的绘制方法

1. 统计图表绘制

1. 直方图绘制

直方图的绘制命令主要是hist命令,它的定义如下:

matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)[source]

其中,几个比较重要的参数的解释如下:

  • x: 输入数据,为一个数组;
  • bins: 切分的区间段数目
  • range: 统计的数据范围
  • density: 是否要进行归一化处理
  • color: 设置直方图的颜色
  • label: 设置直方图名称

给出一个样例如下:

import numpy
x = numpy.random.normal(0, 1, 100000)

plt.figure(figsize=(12, 5))
plt.hist(x, bins=101, range=(-4,4), density=True)
plt.show()

运行即可得到一个高斯分布的直方图。

Python笔记:matplotlib库绘图功能简介_第2张图片

更详细的用法说明可以参考官网链接:

  • https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist

类似的,我们也可以快速地使用hist2d函数绘制出二维空间中的统计分布图。

2. 饼状图绘制

饼状图的绘制命令为pie函数,给出一个简单的实现样例如下:

import numpy

x = numpy.random.normal(0, 1, 100)

plt.figure(figsize=(7, 7))
plt.pie([0.1, 0.2, 0.3, 0.4], labels=["A", "B", "C", "D"])
plt.show()

绘制的到图片如下:
Python笔记:matplotlib库绘图功能简介_第3张图片

更详细的函数说明可以参考官网函数说明:

  • https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html#matplotlib.pyplot.pie

2. 散点图 & 曲线绘制

1. 散点图绘制

散点图的绘制使用的是pyplot库中的scatter函数,其定义如下:

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

其中,常用参数的说明如下:

  • x, y: 输入的x和y坐标值,为等长的list或者array变量;
  • marker: 散点的形状设置,具体可看https://matplotlib.org/api/markers_api.html#module-matplotlib.markers
  • color: 设置散点颜色

给出一个简单的代码范例如下:

x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)

plt.figure(figsize=(12, 7))
plt.scatter(x, y, marker="x", color="red")
plt.show()

Python笔记:matplotlib库绘图功能简介_第4张图片

更详细的说明可以参考官网:

  • https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter

2. 一般曲线绘制

这里,我们来考察以下pyplot中的曲线绘制函数plot的用法。

同样的,我们首先给出plot函数的定义如下:

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

给出一个简单的实现如下:

import numpy
import matlablib.pyplot as plt

x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)

plt.figure(figsize=(12, 7))
plt.plot(x, y)
plt.show()

Python笔记:matplotlib库绘图功能简介_第5张图片

下面,我们给出plot函数的一些比较重要的参数说明如下:

  • x, y: 输入的x和y坐标值,为等长的list或者array变量;
  • color: 设置曲线的颜色
  • linestyle: 曲线的类型设定
  • linewidth: 设置曲线宽度
  • xdata, ydata: 设置x、y坐标轴参数
  • label: 设置曲线名称
  • marker: 设置散点的类型;

更详细的函数说明可以参考官网文档:

  • https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot

3. 图片属性设置

这里,我们来考察图片的整体属性设置。

1. 图片大小设置

图片大小的设置在图片的创建过程中进行设置,命令为通过figsize参数的方式进行设置。

下面,我们给出代码示例如下;

x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)

plt.figure(figsize=(12, 7)) # 创建图片并设置图片大小
plt.plot(x, y, marker="x", color="red")
plt.show()

Python笔记:matplotlib库绘图功能简介_第6张图片

2. 坐标轴设置

我们可以通过axis函数来设置坐标轴的范围。

给出代码示例如下:

x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)

plt.figure(figsize=(12, 7))
plt.plot(x, y, marker="x", color="red")
plt.axis([-2,8,-2,2])
plt.show()

Python笔记:matplotlib库绘图功能简介_第7张图片

通过axis函数即可设置x、y轴的显示范围。

更具体的函数说明可以参考官网说明:

  • https://matplotlib.org/api/_as_gen/matplotlib.pyplot.axis.html#matplotlib.pyplot.axis

3. 网格设置

通过grid函数,可以设置显示出坐标网格。

给出代码示例如下:

x = numpy.linspace(0, 6.28, 20)
y = numpy.sin(x)

plt.figure(figsize=(12, 7))
plt.plot(x, y, marker="x", color="red")
plt.axis([-2,8,-2,2])
plt.grid(True) # 显示坐标网格
plt.show()

Python笔记:matplotlib库绘图功能简介_第8张图片

更详细的函数说明可以参考官网链接:

  • https://matplotlib.org/api/_as_gen/matplotlib.pyplot.grid.html#matplotlib.pyplot.grid

4. 复杂图表绘制

这里,我们来考察一下如何绘制包含多条曲线的复杂图表。

1. 同一张图中绘制多条曲线

在同一张图中绘制多条曲线的方式其实非常简单,只要不重置图片,那么绘制的图标就会一直在图表中叠加出现。

给出代码示例如下:

x = numpy.linspace(0, 6.28, 100)
y1 = numpy.sin(x)
y2 = numpy.cos(x)

plt.figure(figsize=(12, 7))
plt.plot(x, y1)
plt.plot(x, y2)
plt.grid(True)
plt.show()

Python笔记:matplotlib库绘图功能简介_第9张图片

2. 以子图的方式绘制多条曲线

如果要以多张子图的方式绘制图片,我们可以通过subplot命令进行实现。

给出代码示例如下:

x = numpy.linspace(0, 6.28, 100)
y1 = numpy.sin(x)
y2 = numpy.cos(x)

plt.figure(figsize=(12, 7))
plt.subplot(211)
plt.plot(x, y1)
plt.grid(True)
plt.subplot(212)
plt.plot(x, y2)
plt.grid(True)
plt.show()

Python笔记:matplotlib库绘图功能简介_第10张图片

其中,每一个subplot都是平权的,当绘制每一个子图时,把每一个子图都当成一个普通的图即可。

3. 同一张图中设置双坐标系

双坐标系也是实际的绘图中常出现的情形,因此,这里,我们来看一下双坐标系要如何进行处理。

给出代码示例如下:

x = numpy.linspace(0, 6.28, 100)
y1 = numpy.sin(x)
y2 = numpy.cos(x) + 3

fig, ax1 = plt.subplots(figsize=(12, 7))
ax2 = ax1.twinx()
ax1.plot(x, y1)
ax2.plot(x, y2)
plt.grid(True)
plt.show()

Python笔记:matplotlib库绘图功能简介_第11张图片

4. 在大图中绘制子图

大图中绘制小图的情况也是文献中时常看到的一种图型。这里,我们来考察一下这部分内容的绘制。

给出实现的代码示例如下:

x = numpy.linspace(0, 6.28, 100)
y1 = numpy.sin(x)
y2 = numpy.cos(x)

fig = plt.figure(figsize=(12, 7))
plt.plot(x, y1)
ax2 = fig.add_axes([0.6, 0.6, 0.2, 0.2])
ax2.plot(x, y2)
plt.show()

Python笔记:matplotlib库绘图功能简介_第12张图片

4. 参考链接

  1. https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py
  2. https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html
  3. 十、Matplotlib——图中图、次坐标轴(两个坐标轴)

你可能感兴趣的:(python笔记,python)