[python] Matplotlib 绘图方法大全(附完整代码示例)
本文全面介绍了Matplotlib库的主要绘图方法,每种方法均提供完整代码示例。内容包括基础设置、折线图、散点图、柱状图、水平柱状图、饼图、直方图、箱线图、面积图、等高线图和3D曲面图等11种常用图表类型。代码示例详细展示了各类图表的绘制方法及常见参数配置,如颜色、标签、图例、网格等可视化元素的设置。所有示例均针对中文环境优化,解决了中文显示问题,适合作为Python数据可视化的快速参考指南。通过
Matplotlib 绘图方法大全(附完整代码示例)
文章目录
- Matplotlib 绘图方法大全(附完整代码示例)
- 1. 基础设置
- 2. 折线图 (Line Plot)
- 3. 散点图 (Scatter Plot)
- 4. 柱状图 (Bar Chart)
- 5. 水平柱状图 (Horizontal Bar Chart)
- 6. 饼图 (Pie Chart)
- 7. 直方图 (Histogram)
- 8. 箱线图 (Box Plot)
- 9. 面积图 (Area Plot)
- 10. 等高线图 (Contour Plot)
- 11. 3D 曲面图 (3D Surface Plot)
- 12. 极坐标图 (Polar Plot)
- 13. 热力图 (Heatmap)
- 14. 误差条形图 (Error Bar Plot)
- 15. 子图 (Subplots)
- 16. 动画 (Animation)
- 16. 总结
Matplotlib 是 Python 最流行的数据可视化库之一,提供了丰富的绘图功能。本文将详细介绍 Matplotlib 的各种主要绘图方法,每种方法都配有完整可执行的代码示例。
1. 基础设置
在开始之前,我们需要先进行基础设置:
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体显示(解决中文乱码问题)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 生成示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
这段代码导入了必要的库并生成了示例数据,同时解决了中文显示问题。
2. 折线图 (Line Plot)
折线图是最基本的图表类型之一,用于显示数据随时间或有序类别的变化趋势。
plt.figure(figsize=(8, 5))
plt.plot(x, y, label='正弦曲线', color='blue', linestyle='-', linewidth=2)
plt.title('简单的折线图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
plt.grid(True)
plt.show()
这段代码绘制了一条正弦曲线,添加了标题、坐标轴标签和图例。
3. 散点图 (Scatter Plot)
散点图用于展示两个变量之间的关系,适合观察数据的分布情况。
np.random.seed(42)
x_scatter = np.random.rand(50) * 10
y_scatter = np.random.rand(50) * 10
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)
plt.figure(figsize=(8, 5))
plt.scatter(x_scatter, y_scatter, c=colors, s=sizes, alpha=0.6, cmap='viridis')
plt.colorbar(label='颜色值')
plt.title('气泡散点图')
plt.xlabel('X值')
plt.ylabel('Y值')
plt.show()
这段代码创建了一个带有颜色和大小变化的散点图,并添加了颜色条。
4. 柱状图 (Bar Chart)
柱状图用于比较不同类别之间的数值大小。
categories = ['苹果', '香蕉', '橙子', '梨', '葡萄']
values = [23, 45, 56, 78, 33]
plt.figure(figsize=(8, 5))
bars = plt.bar(categories, values, color=['red', 'yellow', 'orange', 'green', 'purple'])
plt.title('水果销量柱状图')
plt.xlabel('水果种类')
plt.ylabel('销量(kg)')
# 在柱子上方添加数值标签
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height,
f'{int(height)}', ha='center', va='bottom')
plt.show()
这段代码创建了一个彩色柱状图,并在每个柱子上方添加了数值标签。
5. 水平柱状图 (Horizontal Bar Chart)
水平柱状图与普通柱状图类似,但柱子是水平排列的。
plt.figure(figsize=(8, 5))
bars = plt.barh(categories, values, color=['red', 'yellow', 'orange', 'green', 'purple'])
plt.title('水果销量水平柱状图')
plt.xlabel('销量(kg)')
plt.ylabel('水果种类')
# 在柱子右侧添加数值标签
for bar in bars:
width = bar.get_width()
plt.text(width + 1, bar.get_y() + bar.get_height()/2,
f'{int(width)}', ha='left', va='center')
plt.show()
这段代码创建了一个水平柱状图,并在每个柱子右侧添加了数值标签。
6. 饼图 (Pie Chart)
饼图用于显示各部分占总体的比例。
plt.figure(figsize=(8, 8))
explode = (0.1, 0, 0, 0, 0) # 突出显示第一部分
plt.pie(values, labels=categories, explode=explode, autopct='%1.1f%%',
shadow=True, startangle=90, colors=['red', 'yellow', 'orange', 'green', 'purple'])
plt.title('水果销量占比饼图')
plt.show()
这段代码创建了一个带有百分比标签、阴影效果和突出显示的饼图。
7. 直方图 (Histogram)
直方图用于展示数据的分布情况。
data = np.random.randn(1000)
plt.figure(figsize=(8, 5))
plt.hist(data, bins=30, color='skyblue', edgecolor='black', alpha=0.7)
plt.title('数据分布直方图')
plt.xlabel('数值')
plt.ylabel('频数')
plt.grid(True, axis='y', linestyle='--', alpha=0.7)
plt.show()
这段代码创建了一个显示随机数据分布的直方图。
8. 箱线图 (Box Plot)
箱线图用于显示数据的中位数、四分位数和异常值。
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
plt.figure(figsize=(8, 5))
plt.boxplot(data, patch_artist=True,
boxprops=dict(facecolor='lightblue', color='blue'),
whiskerprops=dict(color='black'),
capprops=dict(color='black'),
medianprops=dict(color='red'))
plt.title('箱线图示例')
plt.xticks([1, 2, 3], ['组1', '组2', '组3'])
plt.ylabel('数值')
plt.grid(True, axis='y', linestyle='--', alpha=0.7)
plt.show()
这段代码创建了一个彩色箱线图,展示了三组数据的分布情况。
9. 面积图 (Area Plot)
面积图类似于折线图,但线条下方的区域会被填充颜色。
x_area = np.arange(0, 10, 0.1)
y1_area = np.sin(x_area)
y2_area = np.cos(x_area)
plt.figure(figsize=(8, 5))
plt.fill_between(x_area, y1_area, color='skyblue', alpha=0.4, label='正弦')
plt.fill_between(x_area, y2_area, color='orange', alpha=0.4, label='余弦')
plt.plot(x_area, y1_area, color='blue', alpha=0.6, linewidth=1.5)
plt.plot(x_area, y2_area, color='red', alpha=0.6, linewidth=1.5)
plt.title('面积图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
plt.grid(True)
plt.show()
这段代码创建了一个包含正弦和余弦曲线的面积图。
10. 等高线图 (Contour Plot)
等高线图用于显示三维数据的二维投影。
f(x, y):
return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
x_contour = np.linspace(0, 5, 50)
y_contour = np.linspace(0, 5, 40)
X, Y = np.meshgrid(x_contour, y_contour)
Z = f(X, Y)
plt.figure(figsize=(8, 6))
contour = plt.contour(X, Y, Z, 20, colors='black')
plt.clabel(contour, inline=True, fontsize=8)
plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower',
cmap='RdGy', alpha=0.5)
plt.colorbar(label='Z值')
plt.title('等高线图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
这段代码创建了一个带有标签的等高线图,并添加了颜色映射。
11. 3D 曲面图 (3D Surface Plot)
Matplotlib 也支持创建三维图形。
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
# 创建数据
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
# 绘制3D曲面
surf = ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_title('3D曲面图')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')
plt.show()
这段代码创建了一个彩色的3D曲面图,展示了正弦函数的3D表现。
12. 极坐标图 (Polar Plot)
极坐标图用于展示角度和半径之间的关系。
theta = np.linspace(0, 2 * np.pi, 100)
r = 1 + 0.3 * np.random.randn(100)
plt.figure(figsize=(8, 8))
ax = plt.subplot(111, polar=True)
ax.plot(theta, r, 'o-', color='blue', alpha=0.75)
ax.set_rmax(2)
ax.set_title("极坐标图示例", va='bottom')
plt.show()
这段代码创建了一个极坐标图,展示了随机数据在极坐标下的分布。
13. 热力图 (Heatmap)
热力图用于展示矩阵数据的值,通过颜色变化来反映数值大小。
data = np.random.rand(10, 12)
plt.figure(figsize=(10, 8))
plt.imshow(data, cmap='viridis')
plt.colorbar(label='数值')
plt.title('热力图示例')
# 添加坐标轴标签
plt.xticks(np.arange(12), [f'X{i}' for i in range(1, 13)])
plt.yticks(np.arange(10), [f'Y{i}' for i in range(1, 11)])
# 在每个单元格中显示数值
for i in range(data.shape[0]):
for j in range(data.shape[1]):
plt.text(j, i, f'{data[i, j]:.2f}', ha='center', va='center', color='white')
plt.show()
这段代码创建了一个带有数值标签的热力图。
14. 误差条形图 (Error Bar Plot)
误差条形图用于展示数据的不确定性或变化范围。
x_error = np.arange(1, 6)
y_error = [2, 3.5, 4, 5.5, 4.5]
y_err = [0.5, 0.4, 0.6, 0.3, 0.7]
plt.figure(figsize=(8, 5))
plt.errorbar(x_error, y_error, yerr=y_err, fmt='o', color='blue',
ecolor='red', elinewidth=2, capsize=5, capthick=2)
plt.title('误差条形图示例')
plt.xlabel('实验组')
plt.ylabel('测量值')
plt.xticks(x_error, [f'组{i}' for i in x_error])
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()
这段代码创建了一个带有误差条的图表,展示了测量值及其误差范围。
15. 子图 (Subplots)
Matplotlib 允许在一个图形中创建多个子图。
plt.figure(figsize=(12, 8))
# 第一个子图:折线图
plt.subplot(2, 2, 1)
plt.plot(x, np.sin(x), 'r-')
plt.title('正弦曲线')
# 第二个子图:散点图
plt.subplot(2, 2, 2)
plt.scatter(np.random.rand(50), np.random.rand(50), c=np.random.rand(50))
plt.title('随机散点图')
# 第三个子图:柱状图
plt.subplot(2, 2, 3)
plt.bar(categories, values, color=['red', 'yellow', 'orange', 'green', 'purple'])
plt.title('水果销量')
# 第四个子图:饼图
plt.subplot(2, 2, 4)
plt.pie(values, labels=categories, autopct='%1.1f%%')
plt.title('销量占比')
plt.tight_layout() # 自动调整子图间距
plt.show()
这段代码在一个图形中创建了四个不同类型的子图。
16. 动画 (Animation)
Matplotlib 还支持创建简单的动画。
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots(figsize=(8, 5))
x_anim = np.linspace(0, 2*np.pi, 100)
line, = ax.plot(x_anim, np.sin(x_anim), 'b-')
def update(frame):
line.set_ydata(np.sin(x_anim + frame/10))
return line,
ani = FuncAnimation(fig, update, frames=100, interval=50, blit=True)
plt.title('正弦波动画')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.grid(True)
plt.show()
这段代码创建了一个正弦波动画,展示了如何使用Matplotlib制作简单动画。
16. 总结
本文介绍了Matplotlib中最常用的16种绘图方法,每种方法都配有完整的可执行代码示例。通过这些示例,你可以快速掌握Matplotlib的核心绘图功能,并根据自己的需求进行调整和扩展。Matplotlib的功能远不止于此,还有更多高级功能和定制选项等待你去探索。
希望这篇博客能帮助你更好地使用Matplotlib进行数据可视化!
研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)
更多推荐
所有评论(0)