机器学习系列03丨常用科学计算库的使用 Matplotlib

一.什么是Matplotlib

Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。

二.实现一个简单的折线图

1.基础实现

matplotlib.pytplot 模块包含了一系列类似于matlab的画图函数

import matplotlib.pyplot as plt
import random

# 实现基础绘图功能--画出温度变化图

# 准备x,y坐标数据
x = range(60)
y = [random.uniform(24,38) for i in x]
# 创建画布
plt.figure(figsize=(10,4),dpi=80)
# 绘制折线图
plt.plot(x,y)

# 图像保存,必须放在show()前面,否则保存的只是空白图片
plt.savefig('./pic_01.png')

# 显示图像
plt.show()

结果如下图:

20210811094708

2.增加功能:添加自定义x,y刻度、网格显示、描述信息

import matplotlib.pyplot as plt
import random

# 绘制辅助功能完善-某城市温度变换图

# 准备x,y坐标数据
x = range(60)
y = [random.uniform(15,18) for i in x]
# 创建画布
plt.figure(figsize=(10,4),dpi=100)

# 绘制折线图
plt.plot(x,y)

# 添加x,y轴刻度
x_ticks_label = ["11:{}m".format(i) for i in x]
y_ticks = range(40)
#修改x,y轴坐标刻度显示
plt.xticks(x[::5],x_ticks_label[::5])
plt.yticks(y_ticks[::5],)

# 添加网格显示  alpha透明度
plt.grid(True,linestyle='--',alpha=0.5)

# 添加描述信息
plt.xlabel("time")
plt.ylabel("temperature")
plt.title("the city temperature from 11 ~ 12",fontsize=20)

# 图像保存,必须放在show()前面,否则保存的只是空白图片
plt.savefig('./pic_02.png')

# 显示图像 --释放资源
plt.show()

结果如下图:

20210811095546

三.在一个坐标系中绘制多个图像

import matplotlib.pyplot as plt
import random

# 准备x,y坐标数据
x = range(60)
y_beijing = [random.uniform(15, 18) for i in x]
y_shanghai = [random.uniform(24, 36) for i in x]

# 创建画布
plt.figure(figsize=(10, 4), dpi=100)

# 绘制折线图  添加图例,颜色,线的类型
plt.plot(x, y_beijing, label='beijing', color="b", linestyle='-')
plt.plot(x, y_shanghai, label='shanghai', color="r", linestyle='--')

# 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11:{}m".format(i) for i in x]
y_ticks = range(40)

#刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

# 添加网格显示  alpha透明度
plt.grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
plt.xlabel("time")
plt.ylabel("temperature")
plt.title("the city temperature from 11 ~ 12", fontsize=20)

# 显示图例  自动选择一个合适的位置显示图例
plt.legend(loc=0)

# 图像保存,必须放在show()前面,否则保存的只是空白图片
plt.savefig('./pic_03.png')

# 显示图像 --释放资源
plt.show()

结果如下图:

20210811140628

四.多个坐标系显示多个图像

–plt.subplots(面向对象的画图方法)

import matplotlib.pyplot as plt
import random

# 准备数据
x = range(60)
y_beijing = [random.uniform(15, 27) for i in x]
y_shanghai = [random.uniform(24, 36) for i in x]

# 创建画布
# plt.figure(figsize=(10, 4), dpi=100)
# nrows 行  ncols 列
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(16, 6), dpi=100)

# 绘制图像
# plt.plot(x, y_beijing, label='beijing', color="b", linestyle='-')
# plt.plot(x, y_shanghai, label='shanghai', color="r", linestyle='--')
axes[0].plot(x, y_shanghai, label="shanghai")
axes[1].plot(x, y_beijing, label="beijing", color="r", linestyle="--")

# 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["1:{}m".format(i) for i in x]
y_ticks = range(45)

# 刻度显示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
# 字符串刻度显示
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])

# 添加网格显示  alpha透明度
# plt.grid(True, linestyle='--', alpha=0.5)
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
# plt.xlabel("time")
# plt.ylabel("temperature")
# plt.title("the city temperature from 11 ~ 12", fontsize=20)
axes[0].set_xlabel("time")
axes[0].set_ylabel("temperature")
axes[0].set_title('the city temperature from 11 ~ 12', fontsize=20)
axes[1].set_xlabel("time")
axes[1].set_ylabel("temperature")
axes[1].set_title('the city temperature from 11 ~ 12', fontsize=20)

# 显示图例  自动选择一个合适的位置显示图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)

# 图像保存,必须放在show()前面,否则保存的只是空白图片
plt.savefig('./pic_04.png')

# 显示图像 --释放资源
plt.show()

结果如下图显示:

20210811142713

五.散点图的绘制

import matplotlib.pyplot as plt

# 准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,
    163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,
        21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,
    140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,
        30.74, 400.02, 205.35, 330.64, 283.45]

# 创建画布
plt.figure(figsize=(10, 4), dpi=100)

# 绘制图像
plt.scatter(x, y)

# 保存
plt.savefig("./pic_05.png")

# 图像显示
plt.show()

结果如下图:

20210811143123

六.柱状图的绘制

import matplotlib.pyplot as plt

# 0.准备数据
# 电影名字
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
# 横坐标
x = range(len(movie_name))
# 票房数据
y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]

# 1.创建画布
plt.figure(figsize=(10, 4), dpi=100)

# 2.绘制图像
plt.bar(x, y, color=['b','r','g','y','c','m','y','k','c','g','b'], width=0.7)

# 2.1 修改x轴显示
plt.xticks(x, movie_name)

# 2.2 添加网格
plt.grid(linestyle="--", alpha=0.8)

# 2.3 添加标题
plt.title("电影票房收入对比")

# 保存
plt.savefig("./pic_06.png")

# 3.图像显示
plt.show()

结果如下图:

20210811143223

七.其他图像的绘制

  • 直方图

api: matplotlib.pyplot.hist(x, bins=None)

    Parameters:
    x : 需要传递的数据
    bins : 组距
  • 饼图

api: plt.pie(x, labels=,autopct=,colors)

    Parameters:
    x:数量, 自动算百分比
    labels:每部分名称
    autopct:占比显示指定%1.2f%%
    colors:每部分颜色