一 前言
本篇文章带大家快速入门如何使用 matplotlib 画出精美数学的图片; 看完本篇文章你将获得熟悉并简单使用 matplotlib 工具, 会画基本得折现图, 散点图, sin,cos 图, 一张画布画出多图等. 当然 matplotlib 得功能远不止这些, 读者可以参照官网进行学习.
二 图像得组成
下面张图片来自 https://matplotlib.org/index.html 官网, 简单说明一下图片得组成;
figure: 画布, 一张图片得整体轮廓
Axes: 数轴, 一张画布上可以画多张图片
axis: 坐标轴, 通常得 x 轴, y 轴等
tick: 刻度, 坐标轴上得刻度
title: 图片得标题
legend: 图例
grid: 网格
label: 标签说明
三 画折现图
画图之前要导入 matplotlib 库和 numpy 库;
3.1 简单折线图
画一张简单得折线图, 输入得数值只有 y 变量, 并且设置 x,y 轴得标签和字体大小, 详细说明看代码清单
- import matplotlib.pyplot as plot
- import numpy as np
- # 着线图数据
- line = [1,2,6,8,9,15,23,29,35]
- # 指定线条粗细
- plot.plot(line,linewidth=2)
- # 设置标题
- plot.title("zszxz line",fontsize=12)
- # 设置 x 轴
- plot.xlabel("x",fontsize=12)
- # 设置 y 轴
- plot.ylabel("y",fontsize=12)
- # 显示
- plot.show()
图片显示结果
3.2 齐全的折线图
下面得图片画得是带有 x,y 数值得折现图, 能够自定义 x,y 值, 实现数学上的数字换图片效果; 描绘坐标就是 (1,2),(2,4),(6,12),(8,16),(9,18);y 的值正好是 x 的 2 倍(y = 2x); 也可以发现与前面一张图片的不同之处就是初始值不是(0,0) 开始, 而是(1,2);
- import matplotlib.pyplot as plot
- import numpy as np
- # 着线图数据
- line1 = [1,2,6,8,9]
- line2 = [2,4,12,16,18]
- # 指定线条粗细
- plot.plot(line1, line2,linewidth=2)
- # 设置标题
- plot.title("zszxz line",fontsize=12)
- # 设置 x 轴
- plot.xlabel("x",fontsize=12)
- # 设置 y 轴
- plot.ylabel("y",fontsize=12)
- # 显示
- plot.show()
图片结果
3.3 销售折现图
模拟一次水果每个月份的销量, 知识追寻者举例 2 个水果, 分别是苹果, 香蕉, 然后用折现图显示每个月份的销量; 代码清单将设置图例信息, 限制 x 轴的范围(1~12 月), 设置 x 轴刻度;
- import matplotlib.pyplot as plot
- import numpy as np
- # 折线图数据
- line1 = [1,2,6,8,9,25,41,65,32,14,45,100]
- line2 = [2,4,12,16,18,45,3,4,55,67,78,22]
- # 线条 1
- plot.plot(line1,color='red',label="apple",linewidth=2)
- # 线条 2
- plot.plot(line2,color='blue',label="banana",linewidth=2)
- # 设置 x 轴
- plot.xlabel("month",fontsize=12)
- # 设置 y 轴
- plot.ylabel("sales",fontsize=12)
- # 设置标题
- plot.title("zszxz prodcut sale",fontsize=12)
- # 添加图例
- plot.legend()
- # 设置 x 范围
- plot.xlim(1,12)
- # 设置 x 刻度
- x_ticks = np.arange(1, 13, 1)
- plot.xticks(x_ticks)
- # 显示
- plot.show()
执行结果
四 画散点图
4.1 简单的散点图
我们将以简单的 (x,y) 坐标匹配, 然后在画布上画出简单的散点图;
- import matplotlib.pyplot as plot
- import numpy as np
- x = [1,3,5,7,9]
- y = [2,4,6,8,10]
- # 散点
- plot.scatter(x,y)
- # 设置标题
- plot.title("zszxz scatter",fontsize=12)
- # 设置 x 轴
- plot.xlabel("x",fontsize=12)
- # 设置 y 轴
- plot.ylabel("y",fontsize=12)
- # 显示
- plot.show()
执行结果如下, 可以看见基本实现了散点图功能不过不是很好看;
4.2 计算型散点图
实际应用中不可能要我们手动输入 2 个列表进行描绘散点图, 一般都包含一种数学关系, 我们用计算的方式获得散点图;
- import matplotlib.pyplot as plot
- import numpy as np
- x_val = list(range(1,50))
- # y 的值是 x 的平方
- y_val = [x**2 for x in x_val]
- # 设置 x 轴
- plot.xlabel("x",fontsize=12)
- # 设置 y 轴
- plot.ylabel("y",fontsize=12)
- # 散点
- plot.scatter(x_val,y_val,color='pink')
- # 显示
- plot.show()
执行结果如下, 修改颜色, 数据集变多之后, 明显就好看了许多;
4.3 随机数散点图
这次我们将使用随机数进行描绘图片, 并设置图片散点颜色, 标记属性; marker 属性默认是 o , 圆点, 我们将其改成 * ; 更多 marker 配置配置可以参照官方文档
- import matplotlib.pyplot as plot
- import numpy as np
- # 500 个随机数
- n = 500
- # 平均值为 0, 方差为 1
- X = np.random.normal(0,1,n)
- Y = np.random.normal(0,1,n)
- #plot.scatter(X,Y,color='green',alpha=0.7)
- plot.scatter(X,Y,color='green',alpha=0.7,marker='*')
- # 设置网格线
- #plot.grid(True)
- plot.show()
执行结果如下, 可以发现瞬间美观了许多, 当然根据不同的实际需求, 画出的图片也不一样.
五 画正余弦
5.1 正弦
知识追寻者将画 一个 x 轴从 - 2Π 到 + 2 Π的 正弦图, 并且在区间进行 1024 个等分处理;
- import matplotlib.pyplot as plot
- import numpy as np
- # -2Π 到 2 Π 1024 个等值
- x = np.linspace(-np.pi*2, np.pi*2, 1024)
- y = np.sin(x)
- plot.plot(x, y,c='r')
- # 设置 x 轴
- plot.xlabel("x",fontsize=12)
- # 设置 y 轴
- plot.ylabel("y=sin(x)",fontsize=12)
- # 设置标题
- plot.title("zszxz sin",fontsize=12)
- # 显示
- plot.show()
执行结果如下:
5.2 余弦
跟正弦类似, 画 一个 x 轴从 - 2Π 到 + 2 Π的 正弦图, 并且在区间进行 1024 个等分处理;
- import matplotlib.pyplot as plot
- import numpy as np
- # -2Π 到 2 Π 1024 个等值
- x = np.linspace(-np.pi*2, np.pi*2, 1024)
- y = np.cos(x)
- plot.plot(x, y,c='c')
- # 设置 x 轴
- plot.xlabel("x",fontsize=12)
- # 设置 y 轴
- plot.ylabel("y=cons(x)",fontsize=12)
- # 设置标题
- plot.title("zszxz cos",fontsize=12)
- # 显示
- plot.show()
六 画布多图
知识追寻者将 5 章节的正弦, 余弦整合, 然后在一张画布上画出 2 张图片; 懂得这个方法之后, 读者可以在任意得一张画布上画出多张图片; 为了显示更加好看, 还设置了虚线(dashes)
- import matplotlib.pyplot as plot
- import numpy as np
- # 创建画布
- plot.figure()
- # 子图 1
- plot.subplot(211)
- x = np.linspace(-np.pi*2, np.pi*2, 1024)
- sin_y = np.sin(x)
- # 设置虚线
- plot.plot(x, sin_y,dashes=[6, 3],c='m')
- # 子图 2
- plot.subplot(212)
- con_y = np.cos(x)
- plot.plot(x, con_y,dashes=[6, 2],c='r')
- # 显示
- plot.show()
来源: https://www.cnblogs.com/zszxz/p/12149330.html