Matplotlib数据可视化入门:从基础图表到多图展示
Matplotlib是Python中最著名的数据可视化库,它提供了丰富的绘图功能,可以帮助我们将数据转化为直观的图表。本文将介绍Matplotlib的基础图表绘制方法以及多图展示技巧,非常适合初学者学习。
3.2 Matplotlib轴标签和标题
在绘制图表时,为图表添加适当的轴标签和标题是非常重要的,它能让读者更好地理解图表所表达的信息。
import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 绘制图形
plt.plot(x, y)# 添加标题和轴标签
plt.title("正弦函数曲线") # 图表标题
plt.xlabel("X轴") # X轴标签
plt.ylabel("Y轴") # Y轴标签plt.show()
说明:
-
title()
函数用于设置图表标题 -
xlabel()
和ylabel()
分别用于设置X轴和Y轴的标签 -
这些函数应该在绘图函数(如
plot()
)之后调用
3.3 Matplotlib显示中文问题
默认情况下,Matplotlib可能无法正确显示中文字符,会出现方框或乱码。解决方法有以下几种:
方法一:指定中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题plt.title("显示中文标题")
plt.show()
方法二:临时设置字体
plt.title("显示中文标题", fontproperties="SimHei")
plt.show()
常用中文字体:
-
Windows: SimHei(黑体), Microsoft YaHei(微软雅黑)
-
Mac: PingFang SC(苹方), Hiragino Sans GB(冬青黑体)
-
Linux: Noto Sans CJK SC
3.4 Matplotlib绘制网格线
网格线可以帮助我们更准确地读取图表中的数据值。
x = np.linspace(0, 10, 100)
y = np.sin(x)plt.plot(x, y)
plt.title("带网格线的正弦曲线")
plt.grid(True) # 显示网格线# 可以自定义网格线样式
# plt.grid(True, linestyle='--', alpha=0.5)plt.show()
参数说明:
-
linestyle
: 网格线样式,如'-', '--', '-.', ':' -
alpha
: 透明度(0-1) -
color
: 网格线颜色
3.5 Matplotlib绘制多图
当我们需要比较多个相关数据集时,将多个图表放在同一画布上是非常有用的。
3.5.1 subplot()方法
subplot()
方法通过指定行数、列数和当前子图索引来创建子图。
# 创建2行1列的子图,当前操作第1个子图
plt.subplot(2, 1, 1) # (行, 列, 索引)
plt.plot(x, np.sin(x))
plt.title("正弦函数")# 切换到第2个子图
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x))
plt.title("余弦函数")plt.tight_layout() # 自动调整子图间距
plt.show()
3.5.2 subplots()方法
subplots()
方法更现代,可以一次性创建多个子图并返回子图对象的数组。
fig, axes = plt.subplots(2, 2, figsize=(10, 8)) # 2行2列
# 含义
# figsize 参数接受一个包含两个数字的元组 (宽度, 高度)# 第一个数字 10 表示图形的宽度为10英寸# 第二个数字 8 表示图形的高度为8英寸# 绘制第1个子图
axes[0, 0].plot(x, np.sin(x))
axes[0, 0].set_title("正弦函数")# 绘制第2个子图
axes[0, 1].plot(x, np.cos(x))
axes[0, 1].set_title("余弦函数")# 绘制第3个子图
axes[1, 0].plot(x, np.tan(x))
axes[1, 0].set_title("正切函数")
axes[1, 0].set_ylim(-5, 5) # 限制Y轴范围# 绘制第4个子图
axes[1, 1].plot(x, np.exp(x))
axes[1, 1].set_title("指数函数")plt.tight_layout()
plt.show()
优点:
-
代码结构更清晰
-
方便对子图进行统一操作
-
可以轻松调整整个图形的尺寸
3.6 Matplotlib绘制散点图
散点图用于展示两个变量之间的关系,适合观察数据的分布模式。
# 生成随机数据
np.random.seed(0)
x = np.random.randn(100)
y = np.random.randn(100)
colors = np.random.rand(100)
sizes = 1000 * np.random.rand(100)plt.scatter(x, y, c=colors, s=sizes, alpha=0.7, cmap='viridis')
plt.colorbar() # 显示颜色条
plt.title("随机散点图")
plt.xlabel("X值")
plt.ylabel("Y值")
plt.show()
参数说明:
-
c
: 点颜色,可以是单一颜色或颜色序列 -
s
: 点大小 -
alpha
: 透明度 -
cmap
: 颜色映射
3.7 Matplotlib柱形图
柱形图适合比较不同类别之间的数值大小。
labels = ['苹果', '香蕉', '橙子', '梨']
values = [25, 40, 30, 20]plt.bar(labels, values, color=['red', 'yellow', 'orange', 'green'])
plt.title("水果销量")
plt.ylabel("销量(kg)")
plt.show()
变体:分组柱形图
labels = ['第一季度', '第二季度', '第三季度', '第四季度']
men_means = [20, 35, 30, 35]
women_means = [25, 32, 34, 20]x = np.arange(len(labels))
width = 0.35fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, men_means, width, label='男性')
rects2 = ax.bar(x + width/2, women_means, width, label='女性')ax.set_ylabel('销量')
ax.set_title('季度销量按性别分组')
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()plt.show()
3.8 Matplotlib饼图
饼图适合展示各部分占整体的比例。
labels = ['娱乐', '餐饮', '交通', '购物', '其他']
sizes = [15, 30, 20, 25, 10]
explode = (0, 0.1, 0, 0, 0) # 突出"餐饮"部分plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',shadow=True, startangle=90)
plt.axis('equal') # 确保饼图是圆形
plt.title("月度支出比例")
plt.show()
参数说明:
-
explode
: 突出显示某部分 -
autopct
: 显示百分比格式 -
shadow
: 添加阴影效果 -
startangle
: 起始角度
3.9 Matplotlib直方图
直方图用于展示数据的分布情况。
# 生成正态分布数据
data = np.random.randn(1000)plt.hist(data, bins=30, density=True, alpha=0.7, histtype='stepfilled', color='steelblue', edgecolor='none')
plt.title("数据分布直方图")
plt.xlabel("值")
plt.ylabel("频率")
plt.show()
参数说明:
-
bins
: 柱子数量 -
density
: 是否显示为概率密度 -
alpha
: 透明度 -
histtype
: 直方图类型
总结
本文介绍了Matplotlib中常用的图表类型和绘制方法,包括:
-
基础图表元素:轴标签、标题、网格线
-
中文显示问题的解决方案
-
多图绘制方法:subplot()和subplots()
-
常用图表类型:散点图、柱形图、饼图、直方图
掌握这些基础图表绘制方法后,你已经可以完成大部分的数据可视化任务。在实际应用中,可以根据数据特点选择合适的图表类型,并通过调整各种参数使图表更加美观和易读。
学习建议:
-
多动手实践,尝试修改示例代码中的参数
-
查阅Matplotlib官方文档了解更多参数和功能
-
学习如何自定义图表样式,如颜色、线型、标记等
希望这篇教程能帮助你快速入门Matplotlib数据可视化!