【机器学习第二章】Matplotlib

概览

什么是Matplotlib

Matplotlib是专门用于开发2D图表(包括3D图表)的工具,便于使用,以渐进、交互式方式实现数据可视化。

为什么学习Matplotlib

可视化是在整个数据挖掘中的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。

  • 能将数据进行可视化,更直观的呈现。
  • 使数据更加客观、更具说服力。

Matplotlib三层结构

使用以下代码绘制基本的图像。

import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(20,8), dpi=100)
# 2.绘制图像
x = [1,2,3]
y = [4,5,6]
plt.plot(x, y)

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

在这里插入图片描述

容器层

容器层又分为Canvas、Figure、Axes组成。

  • Canvas曾是位于最底层的系统层,是绘图中的基本画板,一般不用用户关心。
  • Figure是应用层的第一层,充当画布的角色。整个图形都属于Figure,可以调整画布大小及分辨率。
  • Axes层是应用层的第二层,可分为坐标系和坐标轴。可以调整大小限制,刻度和刻度标签等。

辅助显示层

辅助显示层为Axes内除了根据数据绘制出的图像以外的内容,主要包括Axes外观,边框线,坐标轴,坐标轴名称等。

图像层

图像层指Axes内通过plot(折线图),scatter(散点图),bar(条形图),histogram(直方图),pie(饼图)等函数绘制出的图像。

折线图绘制

pyplot模块

pyplot模块提供了一系列画图函数。可以用plot绘制绘制折线图。

import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(10,10), dpi=50)
# 2.绘制图像
x = [1,2,3,4,5,6,7]
y = [17,17,18,15,11,11,13]
plt.plot(x, y)

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

在这里插入图片描述

设置画布属性

但是这样设置的图像并不好看,在plt.figure()函数中有两个参数需要关注。

figsize:设置画布大小。传入一个元祖,第一个元素代表长,第二个元素代表宽。
dpi:设置画布分辨率。

我们可以设置这两个参数来调整画布大小到何时尺寸。

plt.figure(figsize=(20,8), dpi=100)

在这里插入图片描述
图像就被拉长了,绘制也更清晰了。

图片保存

plt.savefig("test.png")

savefig函数可以设置将图像保存在哪里。
保存要放在show之前,在show之后原先设置的figure将被关闭。参考官方文档:
在这里插入图片描述

完善折线图

初始数据

import random
x = range(60)
y = [random.uniform(10, 15) for i in x]

plt.figure(figsize=(20, 8), dpi=100)
plt.plot(x, y)

plt.show()

在这里插入图片描述

增加横轴刻度和纵轴刻度

import random
plt.rcParams['font.family'] = 'Heiti TC'  # 替换为你选择的字体
x = range(60)
y = [random.uniform(10, 15) for i in x]

plt.figure(figsize=(20, 8), dpi=100)
plt.plot(x, y)

# 添加自定义x,y刻度
# y轴刻度从0-40,每间隔5一个刻度
y_ticks = range(40)
plt.yticks(y_ticks[::5])

# x轴刻度从0-60,每间隔10一个刻度,并且要有文字的标签
x_ticks = ["11分{}秒".format(i) for i in x]
plt.xticks(x[::10], x_ticks[::10])

plt.show()

在这里插入图片描述
要注意plt.xticksplt.yticks的第一个参数必须是数字序列,第二个序列才是标签。

添加网格信息

# linestyle表示网格线条格式。'--'是虚线,'-'是实线。
# alpha表示网格的透明度。
plt.grid(True, linestyle='--', alpha=0.5)

在这里插入图片描述

添加描述

# 设置描述
plt.xlabel("时间") # 设置横轴描述
plt.ylabel("温度") # 设置纵轴描述
plt.title("一小时温度变化图", fontsize=20) # 设置标题,fontsize设置字体大小

在这里插入图片描述

添加第二条折线图并显示图例

只需要再次plot显示折线即可。

y = [random.uniform(10, 15) for i in x]
y2 = [random.uniform(20, 25) for i in x]

plt.figure(figsize=(20, 8), dpi=100)
plt.plot(x, y)
plt.plot(x, y2)

在这里插入图片描述这样第二条折线也出来了,但是现在不知道哪条线代表的是哪条数据,所以要添加图例。

plt.plot(x, y, label= "北京")
plt.plot(x, y2, label="上海")

添加图例的时候我们需要在绘制每一条折线时,给折线带上label属性。然后使用:

plt.legend(loc=3) # loc参数表示显示图例的位置,默认会自动选择最好的位置。

方法即可显示图例。
在这里插入图片描述

设置图形风格

plt.plot(x, y, color='r', linestyle="-.", label= "北京") # 设置颜色为红色,风格为'-.'线
plt.plot(x, y2, color='b', label="上海") # 设置颜色为蓝色

在这里插入图片描述

完整代码

import random
plt.rcParams['font.family'] = 'Heiti TC'  # 替换为你选择的字体
x = range(60)
y = [random.uniform(10, 15) for i in x]
y2 = [random.uniform(20, 25) for i in x]

plt.figure(figsize=(20, 8), dpi=100)
plt.plot(x, y, color='r', linestyle="-.", label= "北京")
plt.plot(x, y2, color='b', label="上海")

# 添加自定义x,y刻度
# y轴刻度从0-40,每间隔5一个刻度
y_ticks = range(40)
plt.yticks(y_ticks[::5])

# x轴刻度从0-60,每间隔10一个刻度,并且要有文字的标签
x_ticks = ["11分{}秒".format(i) for i in x]
plt.xticks(x[::10], x_ticks[::10])

# 设置网格
plt.grid(True, linestyle='--', alpha=0.5)

# 设置描述
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("一小时温度变化图", fontsize=20)

# 显示图例
plt.legend()

plt.show()

多坐标系显示图像

import random
plt.rcParams['font.family'] = 'Heiti TC'  # 替换为你选择的字体
x = range(60)
y = [random.uniform(10, 15) for i in x]
y2 = [random.uniform(20, 25) for i in x]

# 建立多坐标系,使用subplots函数,在返回的axes对象中绘图
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
axes[0].plot(x, y, color='r', linestyle="-.", label= "北京")
axes[1].plot(x, y2, color='b', label="上海")

# 添加自定义x,y刻度
# 要分别个给两个坐标系设置坐标轴刻度
x_ticks = ["11分{}秒".format(i) for i in x]
axes[0].set_xticks(x[::10])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks[::10])
axes[1].set_xticks(x[::10])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks[::10])

# 设置网格
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)

# 设置描述
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("一小时温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("一小时温度变化图", fontsize=20)

# 显示图例
axes[0].legend()
axes[1].legend()

plt.show()

多坐标系的建立需要使用到subplots函数,不同坐标系的控制要使用不同的axes对象,方法和单坐标系使用的方法差不多。

折线图绘制函数图像

import numpy as np

# 使用numpy获取x,y坐标
x = np.linspace(-10, 10, 1000)
y = np.sin(x)

plt.figure(figsize=(20, 8), dpi=100)

plt.plot(x, y)

plt.show()

在这里插入图片描述

常见图形绘制

散点图

x = [random.uniform(0, 200) for i in range(20)]
y = [random.uniform(0, 300) for i in range(20)]

plt.figure(figsize=(20, 8), dpi=100)

plt.scatter(x, y)

plt.show()

使用plt.scatter()函数绘制散点图。

柱状图

movie_name = ["雷神3:诸神黄昏", "正义联盟", "东方快车谋杀案", "寻梦环游记", "全球风暴", "降魔传", "追捕", "七十七天", "密战", "狂兽", "其它"]

x = range(len(movie_name))

y = [73853, 57767, 22354, 15969, 14839, 8725, 8716, 8318, 7916, 6764, 52222]

plt.figure(figsize=(20, 8), dpi=100)

plt.bar(x, y)

# x周刻度
plt.xticks(x, movie_name)

plt.grid()

plt.title("某月电影票房统计")

plt.show()

在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 08:46:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 08:46:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 08:46:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 08:46:03       18 阅读

热门阅读

  1. 高级语言讲义2011软专(仅高级语言部分)

    2024-03-11 08:46:03       21 阅读
  2. 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit

    2024-03-11 08:46:03       22 阅读
  3. 套接字编程 --- 二

    2024-03-11 08:46:03       16 阅读
  4. 使用Pytorch进行梯度下降的计算

    2024-03-11 08:46:03       19 阅读
  5. pytorch保存和加载模型以及如何load部分参数

    2024-03-11 08:46:03       21 阅读
  6. 精通SpringBoot单元测试

    2024-03-11 08:46:03       20 阅读
  7. 浅谈单元测试和JUnit4使用

    2024-03-11 08:46:03       20 阅读
  8. k8s中replication controller组件

    2024-03-11 08:46:03       20 阅读
  9. iOS 实现悬浮跟手滚动效果

    2024-03-11 08:46:03       21 阅读
  10. C++从零开始的打怪升级之路(day47)

    2024-03-11 08:46:03       18 阅读
  11. BJFU|计算机网络期末复习考前速记

    2024-03-11 08:46:03       17 阅读