当前位置: 首页 > news >正文

Pandas 掌握Matplotlib基础绘图①

Matplotlib基础绘图学习笔记

  • 欢迎使用Matplotlib进行基础绘图
    • 单图绘制(代码5 - 1)
      • 结果
    • 子图绘制(代码5 - 2)
      • 结果
    • 绘图样式修改(代码5 - 3)
      • 结果
    • 中文显示设置(代码5 - 4)
      • 结果
    • 不同图表类型绘制
      • 散点图
        • 劳动力人数散点图(代码5 - 5)
      • 结果
        • 城乡就业人数散点图(代码5 - 6)
      • 结果
      • 折线图
        • 就业人数折线图(代码5 - 7)
      • 结果
        • 就业人数点线图(代码5 - 8)
      • 结果
        • 城乡就业人数点线图(代码5 - 9)
      • 结果
      • 柱形图(代码5 - 10)
      • 结果
      • 饼图(代码5 - 11)
      • 结果
      • 箱线图(代码5 - 12)
      • 结果
    • 总结

欢迎使用Matplotlib进行基础绘图

Matplotlib是Python中一个强大的绘图库,本文将结合具体代码示例,详细介绍Matplotlib的基础绘图功能,包括单图绘制、子图绘制、绘图样式修改、中文显示设置以及不同图表类型的绘制等。

单图绘制(代码5 - 1)

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
# %matplotlib inline表示在行中显示图片,在命令行运行报错
data = np.arange(0, 1.1, 0.01)
plt.title('lines')  # 添加标题
plt.xlabel('x')  # 添加x轴的名称
plt.ylabel('y')  # 添加y轴的名称
plt.xlim((0, 1))  # 确定x轴范围
plt.ylim((0, 1))  # 确定y轴范围
plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1])  # 规定x轴刻度
plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1])  # 确定y轴刻度
plt.plot(data, data ** 2)  # 添加y=x^2曲线
plt.plot(data, data ** 4)  # 添加y=x^4曲线
plt.legend(['y=x^2', 'y=x^4'])
plt.savefig('./y=x^2.jpg')
plt.show()

结果

在这里插入图片描述

代码解析

  • np.arange(0, 1.1, 0.01):生成从0到1(包含0,不包含1.1),步长为0.01的一维数组。
  • plt.title():为图表添加标题。
  • plt.xlabel()plt.ylabel():分别为x轴和y轴添加名称。
  • plt.xlim()plt.ylim():设置x轴和y轴的显示范围。
  • plt.xticks()plt.yticks():规定x轴和y轴的刻度。
  • plt.plot():绘制曲线,这里分别绘制了 y = x^2y = x^4 两条曲线。
  • plt.legend():添加图例,用于区分不同的曲线。
  • plt.savefig():将绘制的图表保存为图片。
  • plt.show():显示图表。

子图绘制(代码5 - 2)

在这里插入图片描述
在这里插入图片描述

x = np.arange(0, np.pi * 2, 0.01)
# 第一幅子图
p1 = plt.figure(figsize=(8, 6), dpi=80)  # 确定画布大小
# 创建一个2行1列的子图,并开始绘制第一幅
ax1 = p1.add_subplot(2, 1, 1)
plt.title('lines')  # 添加标题
plt.xlabel('x')  # 添加x轴的名称
plt.ylabel('y')  # 添加y轴的名称
plt.xlim((0, 1))  # 确定x轴范围
plt.ylim((0, 1))  # 确定y轴范围
plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1])  # 规定x轴刻度
plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1])  # 确定y轴刻度
plt.plot(x, x ** 2)  # 添加y=x^2曲线
plt.plot(x, x ** 4)  # 添加y=x^4曲线
plt.legend(['y=x^2', 'y=x^4'])
# 第二幅子图
ax2 = p1.add_subplot(2, 1, 2)  # 开始绘制第二幅
plt.title('sin/cos(x)')  # 添加标题
plt.xlabel('x')  # 添加x轴的名称
plt.ylabel('y')  # 添加y轴的名称
plt.xlim((0, np.pi * 2))  # 确定x轴范围
plt.ylim((-1, 1))  # 确定y轴范围
plt.xticks([0, np.pi / 2, np.pi, np.pi * 1.5, np.pi * 2])  # 规定x轴刻度
plt.yticks([-1, -0.5, 0, 0.5, 1])  # 确定y轴刻度
plt.plot(x, np.sin(x))  # 添加sin(x)曲线
plt.plot(x, np.cos(x))  # 添加cos(x)曲线
plt.legend(['y=sin(x)', 'y=cos(x)'])
plt.tight_layout()  # 调整两个子图间距
plt.savefig('../tmp/sincos(x).jpg')
plt.show()

结果

在这里插入图片描述

代码解析

  • plt.figure(figsize=(8, 6), dpi=80):创建一个大小为8x6英寸,分辨率为80dpi的画布。
  • p1.add_subplot(2, 1, 1):将画布划分为2行1列的子图布局,并选择第1个子图进行绘制。
  • 后续的标题、轴名称、范围、刻度设置以及曲线绘制与单图绘制类似。
  • plt.tight_layout():调整子图之间的间距,避免子图重叠。

绘图样式修改(代码5 - 3)

在这里插入图片描述

# 原图
x = np.linspace(0, 4 * np.pi)  # 生成x轴数据
y = np.sin(x)  # 生成y轴数据
plt.plot(x, y, label='$sin(x)$')  # 绘制sin曲线图
plt.title('sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.show()# 修改rc参数后的图
plt.rcParams['lines.linestyle'] = '-.'
plt.rcParams['lines.linewidth'] = 3
plt.plot(x, y, label='$sin(x)$')  # 绘制三角函数
plt.title('sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

结果

在这里插入图片描述
在这里插入图片描述

代码解析

  • np.linspace(0, 4 * np.pi):生成从0到 4 * np.pi 之间均匀分布的50个点的一维数组。
  • plt.rcParams:用于修改全局的绘图参数,这里分别修改了线条的样式为点划线(`-.')和宽度为3。

中文显示设置(代码5 - 4)

在这里插入图片描述

import matplotlib
import matplotlib.pyplot as plt
import numpy as np# 生成数据
x = np.linspace(0, 4 * np.pi)  
y = np.sin(x)# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = 'SimHei'  # 设置字体为黑体
matplotlib.rcParams['axes.unicode_minus'] = False   # 正常显示负号plt.plot(x, y, label='$sin(x)$')  # 绘制三角函数
plt.title('sin(x)曲线')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

结果

在这里插入图片描述

代码解析

  • 由于默认字体不支持中文,直接设置中文标题会显示乱码。
  • plt.rcParams['font.sans-serif'] = 'SimHei':设置字体为黑体,以支持中文显示。
  • plt.rcParams['axes.unicode_minus'] = False:解决负号显示问题。

不同图表类型绘制

散点图

劳动力人数散点图(代码5 - 5)

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = np.load('./2001-2019年劳动力与就业人员数据.npz',encoding='ASCII', allow_pickle=True)
columns = data['arr_0']  # 提取其中的columns数组,视为数据的标签
values = data['arr_1']  # 提取其中的values数组,视为数据的存在位置
plt.figure(figsize=(12, 6), dpi=1080)  # 设置画布
plt.scatter(values[:, 0], values[:, 1], marker='o')  # 绘制散点图
plt.xlabel('年份(年)')
plt.ylabel('劳动力人数(万人)')
plt.ylim(70000, 85000)  # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.title('2001~2019年劳动力人数散点图')  # 添加图表标题
plt.show()

结果

在这里插入图片描述

代码解析

  • np.load():加载 .npz 格式的数据文件。
  • plt.scatter():绘制散点图,marker='o' 表示使用圆形标记。
城乡就业人数散点图(代码5 - 6)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p = plt.figure(figsize=(12, 6), dpi=1080)  # 设置画布
# 绘制散点图1
plt.scatter(values[:, 0], values[:, 3], marker='o', c='b')
# 绘制散点图2
plt.scatter(values[:, 0], values[:, 4], marker='o', c='r')
plt.xlabel('年份(年)')
plt.ylabel('人数(万人)')
plt.ylim(20000, 60000)  # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.legend(['城镇就业人员', '乡村就业人员'])  # 设置图例
plt.title('2001~2019年城乡就业人数散点图')  # 添加图表标题
plt.show()

结果

在这里插入图片描述

代码解析

  • 绘制了两个散点图,分别表示城镇和乡村就业人员数量,c='b'c='r' 分别表示蓝色和红色。

折线图

就业人数折线图(代码5 - 7)

在这里插入图片描述
在这里插入图片描述

p = plt.figure(figsize=(12, 6), dpi=1080)  #设置画布
plt.plot(values[:, 0], values[:, 2], color='r', linestyle='-')
plt.xlabel('年份(年)')
plt.ylabel('人数(万人)')
plt.ylim(70000, 80000)  # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.title('2001~2019年就业人数折线图')
plt.show()

结果

在这里插入图片描述

代码解析

  • plt.plot():绘制折线图,color='r' 表示红色,linestyle='-' 表示实线。
就业人数点线图(代码5 - 8)
p = plt.figure(figsize=(12, 6), dpi=1080)  #设置画布
plt.plot(values[:, 0], values[:, 2], c='b', linestyle = '-', marker = 'o')  # 绘制点线图
plt.xlabel('年份(年)')
plt.ylabel('人数(万人)')
plt.ylim(70000, 80000)  # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.title('2001~2019年就业人数点线图')
plt.show()

结果

在这里插入图片描述

代码解析

  • marker = 'o':在折线上添加圆形标记,形成点线图。
城乡就业人数点线图(代码5 - 9)
p = plt.figure(figsize=(12, 6), dpi=1080) #设置画布
plt.plot(values[:, 0], values[:, 3], 'bs-',values[:, 0], values[:, 4], 'ro-.')
plt.xlabel('年份(年)')
plt.ylabel('人数(万人)')
plt.ylim(20000, 60000)  # 设置y轴范围
plt.xticks(range(2001, 2020, 1), labels=values[:, 0])
plt.legend(['城镇就业人员', '乡村就业人员'])
plt.title('2001~2019年城乡就业人数点线图')
plt.show()

结果

在这里插入图片描述

代码解析

  • 'bs-''ro-.' 是一种简洁的绘图格式表示,分别表示蓝色正方形标记的实线和红色圆形标记的点划线。
    在这里插入图片描述

柱形图(代码5 - 10)

在这里插入图片描述

columns = data['arr_0']  # 提取其中的columns数组,视为数据的标签
values = data['arr_1']  # 提取其中的values数组,视为数据的存在位置
# 绘制柱形图
labels = ['城镇就业人员', '乡村就业人员']
p = plt.figure(figsize=(6, 6), dpi=1080)
plt.bar(range(2), values[-1, 3:5], width=0.5)
plt.xlabel('类别')
plt.ylabel('就业人数(万人)')
plt.xticks(range(2), labels)
plt.title('2019年城乡就业人数柱形图')
plt.show()

结果

在这里插入图片描述

代码解析

  • plt.bar():绘制柱形图,range(2) 表示柱子的位置,values[-1, 3:5] 表示柱子的高度,width=0.5 表示柱子的宽度。

饼图(代码5 - 11)

在这里插入图片描述
在这里插入图片描述

label = ['城镇就业人员', '乡村就业人员']
explode = [0.01, 0.01]  # 设定各项距离圆心n个半径
p = plt.figure(figsize=(6, 6), dpi=1080)  # 设置画布
plt.pie(values[-1, 3:5], explode=explode, labels=label, autopct='%1.1f%%')
plt.title('2019年城乡就业人数分布饼图')
plt.show()

结果

在这里插入图片描述

代码解析

  • plt.pie():绘制饼图,explode 表示将饼图的部分从圆心处分离,autopct='%1.1f%%' 表示在饼图上显示百分比,保留一位小数。

箱线图(代码5 - 12)

在这里插入图片描述

label = ['城镇就业人员', '乡村就业人员']
gdp = (list(values[:, 3]), list(values[:, 4]))
p = plt.figure(figsize=(6, 6), dpi=1080)
# 将 labels=label 改为 tick_labels=label
plt.boxplot(gdp, notch=True, tick_labels=label, meanline=True) 
plt.title('2001~2019年城乡就业人数分布箱线图')
plt.show()

结果

在这里插入图片描述

代码解析

  • plt.boxplot():绘制箱线图,notch=True 表示绘制带缺口的箱线图,meanline=True 表示显示均值线。

总结

通过本文的学习,你将掌握以下重点内容:

  1. 学会使用Matplotlib进行单图和子图的绘制,包括设置标题、轴名称、范围、刻度等。
  2. 掌握如何修改绘图的样式,如线条样式和宽度。
  3. 解决中文显示问题,确保图表中的中文标题和标签能够正常显示。
  4. 学会绘制不同类型的图表,如散点图、折线图、柱形图、饼图和箱线图,以满足不同的数据可视化需求。

通过这些知识和技能,你可以更加灵活地使用Matplotlib进行数据可视化,将数据以直观的图表形式展示出来,帮助你更好地理解和分析数据。

相关文章:

  • Redis——持久化
  • 单细胞转录组(1)
  • 嵌入式培训之数据结构学习(五)栈与队列
  • 手撕I2C和SPI协议实现
  • 机器学习回归预测中预处理的特征工程
  • 数据结构与算法——双向链表
  • QT调用Halcon查询所有摄像头名称
  • 基于 Python 的界面程序复现:标准干涉槽型设计计算及仿真
  • UE 材质基础 第一天
  • WPS JS宏实现去掉文档中的所有空行
  • 数组集合互转问题
  • 星火杯大模型应用创新赛学习笔记——datawhale
  • 深入探讨 Java 17的 Text Blocks
  • V型不锈钢对夹球阀:高性价比工业控制解决方案-耀圣
  • 布隆过滤器和布谷鸟过滤器
  • 关系代数和关系数据库语言(SQL)
  • 202537 |《代码整洁之道》笔记
  • C# 创建线程的方式
  • 基于LLM合成高质量情感数据,提升情感分类能力!!
  • 程序人生-Hello’s P2P
  • 朱雀二号改进型遥二运载火箭发射成功
  • 大外交丨3天拿下数万亿美元投资,特朗普在中东做经济“加法”和政治“减法”
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 中国军网:带你揭开3所新调整组建军队院校的神秘面纱
  • 从普通人经历中发现历史,王笛解读《线索与痕迹》
  • 吉林:消纳绿电,“氢”装上阵