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^2
和y = 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
表示显示均值线。
总结
通过本文的学习,你将掌握以下重点内容:
- 学会使用Matplotlib进行单图和子图的绘制,包括设置标题、轴名称、范围、刻度等。
- 掌握如何修改绘图的样式,如线条样式和宽度。
- 解决中文显示问题,确保图表中的中文标题和标签能够正常显示。
- 学会绘制不同类型的图表,如散点图、折线图、柱形图、饼图和箱线图,以满足不同的数据可视化需求。
通过这些知识和技能,你可以更加灵活地使用Matplotlib进行数据可视化,将数据以直观的图表形式展示出来,帮助你更好地理解和分析数据。