引言
当谈论数据分析和数据可视化时,Matplotlib是一个强大的工具,它不仅提供了丰富的功能,还允许用户创建高质量的图形和图表。本篇博客旨在帮助你掌握Matplotlib的基础知识和高级技巧,以便你能够有效地利用它来展示数据、解释趋势和传达信息。
在这篇博客中,我们将深入探讨Matplotlib的各个方面,从数据可视化的基础开始,包括折线图、散点图、条形图、直方图和饼图等,一直到更高级的图形元素,如图形注释、箭头、图例高级用法、区域填充和阴影效果。我们还将学习如何创建三维数据可视化、动画和交互式控件,以及如何导出图形文件、设置图形风格和自定义色彩和配色方案。
本文提供了各种示例代码,图像就不提供出来了,简单示例可以通过复制代码运行获得图像
原因:个人采用的是github图床,利用jsDelivr 提供的全球 CDN 加速
github 和jsdelivr 都有大小限制: GitHub 图床仓库大小不能超过1G。 因为GitHub 原则上是反对仓库图床化的,当仓库超过1G 后会有人工审核仓库内容,如果发现用来做图床,轻则删库重则封号
当然,主要还是简单图例我觉得太多,太麻烦……放重点图例吧哈哈
1. Matplotlib 简介和安装
Matplotlib简介:Matplotlib是Python中最常用的数据可视化库之一,用于创建静态、动态、交互式图表。
安装Matplotlib:使用
pip
或conda
可以轻松安装Matplotlib。示例代码:
# 安装Matplotlib !pip install matplotlib
2. Matplotlib 绘图原理
- 绘图原理:Matplotlib采用面向对象的方式来创建图表。所有图表元素都是对象,从
Figure
对象到Axes
对象,都是构建图表的关键部分。
3. Matplotlib 常用模块和函数
pyplot
模块
pyplot
简介:pyplot
是Matplotlib的一个子模块,提供了一种类似于MATLAB的界面,用于绘制图表。示例代码:
import matplotlib.pyplot as plt
Figure
对象和子图Figure
对象:Figure
对象是图表的顶层容器,用于容纳图表中的所有元素。子图:子图是
Axes
对象的容器,用于在一个Figure
对象中容纳多个图表。示例代码:
# 创建一个Figure对象 fig = plt.figure() # 创建一个子图 ax = fig.add_subplot(111)
Axes
对象和坐标系Axes
对象:Axes
对象是图表的主要绘图区域,用于绘制数据点、线条、文本等。坐标系:
Axes
对象具有X和Y坐标轴,你可以在坐标轴上绘制数据。示例代码:
# 绘制一条线 ax.plot([0, 1, 2], [0, 1, 4])
图形属性设置
线条样式:通过
linestyle
参数设置线条样式。颜色:通过
color
参数设置线条颜色。标记点:通过
marker
参数设置标记点样式。示例代码:
# 自定义线条样式、颜色和标记点 ax.plot([0, 1, 2], [0, 1, 4], linestyle='--', color='red', marker='o')
文本标注和注释
添加文本标注:使用
text()
函数在图表中添加文本标注。添加注释:使用
annotate()
函数添加带箭头的注释。示例代码:
# 添加文本标注 ax.text(1, 3, 'Data Point (1, 3)') # 添加注释 ax.annotate('Max Value', xy=(2, 4), xytext=(1.5, 3.5), arrowprops=dict(arrowstyle='->'))
import matplotlib.pyplot as plt
# 创建一个Figure对象
fig = plt.figure()
# 创建一个子图
ax = fig.add_subplot(111)
# 调整坐标轴刻度线和标签的颜色为白色——我的jupyter notebook的背景色是黑色,改与自己主题颜色适应的坐标轴颜色
ax.tick_params(axis='both', colors='white')
# 绘制一条线
ax.plot([0, 1, 2], [0, 1, 4])
# 自定义线条样式、颜色和标记点
ax.plot([0, 1, 2], [0, 1, 4], linestyle='--', color='red', marker='o')
# 添加文本标注
ax.text(1, 3, 'Data Point (1, 3)')
# 添加注释
ax.annotate('Max Value', xy=(2, 4), xytext=(1.5, 3.5),
arrowprops=dict(arrowstyle='->'))
plt.show()
4.折线图绘制
单条折线图
绘制一个简单的单条折线图。
import matplotlib.pyplot as plt
# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [10, 8, 12, 15, 7]
# 绘制折线图
plt.plot(x, y, label='Line 1', marker='o', linestyle='-', color='blue')
# 添加标题和标签
plt.title('单条折线图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 显示图例
plt.legend()
# 显示图表
plt.show()
plt.plot(x, y, label='Line 1', marker='o', linestyle='-', color='blue')
:这行代码绘制了折线图。x
和y
分别是X轴和Y轴的数据,label
用于设置图例标签,marker
指定标记点的样式,linestyle
设置线条样式,color
设置线条颜色。plt.title('单条折线图')
:添加标题。plt.xlabel('X轴')
和plt.ylabel('Y轴')
:添加X轴和Y轴的标签。plt.legend()
:显示图例。plt.show()
:显示图表。
多条折线图
绘制多条折线图。
import matplotlib.pyplot as plt
# 创建示例数据
x = [1, 2, 3, 4, 5]
y1 = [10, 8, 12, 15, 7]
y2 = [5, 12, 6, 8, 11]
# 绘制多条折线图
plt.plot(x, y1, label='Line 1', marker='o', linestyle='-', color='blue')
plt.plot(x, y2, label='Line 2', marker='x', linestyle='--', color='red')
# 添加标题和标签
plt.title('多条折线图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 显示图例
plt.legend()
# 显示图表
plt.show()
5.散点图绘制
散点图基本绘制
绘制一个基本的散点图。
import matplotlib.pyplot as plt
# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [10, 8, 12, 15, 7]
# 绘制散点图
plt.scatter(x, y, label='Data Points', color='blue', marker='o')
# 添加标题和标签
plt.title('基本散点图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 显示图例
plt.legend()
# 显示图表
plt.show()
plt.scatter(x, y, label='Data Points', color='blue', marker='o')
:这行代码绘制了散点图。x
和y
分别是X轴和Y轴的数据,label
用于设置图例标签,color
设置散点的颜色,marker
指定散点的样式。
散点图颜色映射
使用颜色映射来为散点图中的数据点添加颜色。下面是一个带有颜色映射的散点图示例:
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100) # 随机生成颜色数据
# 绘制散点图,使用颜色映射
plt.scatter(x, y, c=colors, cmap='viridis', label='Data Points')
# 添加标题和标签
plt.title('散点图颜色映射')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 添加颜色映射条
plt.colorbar()
# 显示图例
plt.legend()
# 显示图表
plt.show()
c=colors
:通过c
参数指定颜色数据。cmap='viridis'
:通过cmap
参数指定颜色映射。
散点图大小映射
根据数据的大小来映射散点的大小。下面是一个带有大小映射的散点图示例:
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.random.rand(100)
y = np.random.rand(100)
sizes = np.random.rand(100) * 100 # 随机生成大小数据
# 绘制散点图,使用大小映射
plt.scatter(x, y, s=sizes, label='Data Points', alpha=0.7)
# 添加标题和标签
plt.title('散点图大小映射')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 显示图例
plt.legend()
# 显示图表
plt.show()
s=sizes
:通过s
参数指定大小数据。alpha=0.7
:通过alpha
参数设置散点的透明度。
6.条形图绘制
水平条形图
绘制一个水平条形图。
import matplotlib.pyplot as plt
# 创建示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [30, 50, 40, 60]
# 绘制水平条形图
plt.barh(categories, values, color='skyblue')
# 添加标题和标签
plt.title('水平条形图')
plt.xlabel('值')
plt.ylabel('类别')
# 显示图表
plt.show()
plt.barh(categories, values, color='skyblue')
:这行代码绘制了水平条形图。categories
是类别标签,values
是条形的值,color
设置条形的颜色。
垂直条形图
绘制一个垂直条形图。
import matplotlib.pyplot as plt
# 创建示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [30, 50, 40, 60]
# 绘制垂直条形图
plt.bar(categories, values, color='salmon')
# 添加标题和标签
plt.title('垂直条形图')
plt.xlabel('类别')
plt.ylabel('值')
# 显示图表
plt.show()
plt.bar(categories, values, color='salmon')
:这行代码绘制了垂直条形图,参数设置与水平条形图类似。
分组条形图和堆积条形图
分组条形图和堆积条形图可以通过调整数据和条形的宽度来创建。以下是一个示例:
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values1 = [30, 50, 40, 60]
values2 = [20, 40, 60, 30]
width = 0.35 # 条形的宽度
# 计算每个类别的中心位置
x = np.arange(len(categories))
# 绘制分组条形图
plt.bar(x - width/2, values1, width, label='Group 1', color='skyblue')
plt.bar(x + width/2, values2, width, label='Group 2', color='salmon')
# 添加标题和标签
plt.title('分组条形图')
plt.xlabel('类别')
plt.ylabel('值')
# 显示图例
plt.legend()
# 显示图表
plt.show()
plt.bar(x - width/2, values1, width, label='Group 1', color='skyblue')
:这行代码绘制了两组分组条形图。x - width/2
用于确定第一组的位置,x + width/2
用于确定第二组的位置。
7.直方图绘制
单变量直方图
绘制一个单变量直方图,以探索单个变量的分布。
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据(单变量)
data = np.random.randn(1000)
# 绘制单变量直方图
plt.hist(data, bins=20, color='skyblue', edgecolor='black')
# 添加标题和标签
plt.title('单变量直方图')
plt.xlabel('值')
plt.ylabel('频率')
# 显示图表
plt.show()
plt.hist(data, bins=20, color='skyblue', edgecolor='black')
:这行代码绘制了单变量直方图。data
是要分析的数据,bins
参数指定了直方图的箱数,color
设置直方图的颜色,edgecolor
设置边界颜色。
双变量直方图
绘制一个双变量直方图,用于探索两个变量之间的关系。
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据(双变量)
x = np.random.randn(1000)
y = 2 * x + np.random.randn(1000)
# 绘制双变量直方图
plt.hist2d(x, y, bins=20, cmap='viridis')
# 添加标题和标签
plt.title('双变量直方图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 添加颜色条
plt.colorbar()
# 显示图表
plt.show()
plt.hist2d(x, y, bins=20, cmap='viridis')
:这行代码绘制了双变量直方图。x
和y
是两个变量,bins
参数指定了直方图的箱数,cmap
参数设置颜色映射。
直方图密度曲线
直方图密度曲线也被称为核密度估计,它可用于估计数据的连续概率密度。
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
# 创建示例数据
data = np.random.randn(1000)
# 绘制直方图
plt.hist(data, bins=20, density=True, color='skyblue', alpha=0.7, edgecolor='black')
# 绘制密度曲线
mu, std = norm.fit(data)
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)
# 添加标题和标签
plt.title('直方图和密度曲线')
plt.xlabel('值')
plt.ylabel('密度')
# 显示图表
plt.show()
plt.hist(data, bins=20, density=True, color='skyblue', alpha=0.7, edgecolor='black')
:这行代码绘制了直方图,density=True
参数将频率转换为密度。norm.fit(data)
:使用正态分布拟合数据以绘制密度曲线。norm.pdf(x, mu, std)
:使用正态分布的概率密度函数绘制密度曲线。
8.饼图绘制
基本饼图
绘制一个基本的饼图,以表示数据占比。
import matplotlib.pyplot as plt
# 创建示例数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['skyblue', 'salmon', 'lightgreen', 'lightcoral']
# 绘制基本饼图
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
# 添加标题
plt.title('基本饼图')
# 显示图表
plt.show()
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
:这行代码绘制了基本饼图。sizes
是数据占比,labels
是每个切片的标签,colors
是切片颜色,autopct
用于在饼图中显示百分比,startangle
指定饼图的起始角度。
饼图切片突出和排序
可以通过突出某个切片来强调数据,也可以通过排序来改变切片的顺序。
import matplotlib.pyplot as plt
# 创建示例数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['skyblue', 'salmon', 'lightgreen', 'lightcoral']
# 突出切片 B
explode = (0, 0.1, 0, 0)
# 绘制突出切片的饼图并排序
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90, explode=explode, shadow=True)
# 添加标题
plt.title('突出切片和排序的饼图')
# 显示图表
plt.show()
explode = (0, 0.1, 0, 0)
:通过explode
参数,我们突出了切片 B。shadow=True
:为饼图添加阴影效果。
饼图标签和百分比
可以在饼图上添加标签和百分比。
import matplotlib.pyplot as plt
# 创建示例数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['skyblue', 'salmon', 'lightgreen', 'lightcoral']
# 绘制饼图并添加标签和百分比
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90, pctdistance=0.85)
# 添加标题
plt.title('带标签和百分比的饼图')
# 显示图表
plt.show()
autopct='%1.1f%%'
:通过autopct
参数,我们在饼图中显示百分比。pctdistance=0.85
:通过pctdistance
参数,我们调整了百分比标签的位置。
9.坐标系
轴范围和刻度设置
可以使用plt.xlim()
和plt.ylim()
函数设置X轴和Y轴的范围,并使用plt.xticks()
和plt.yticks()
函数设置刻度。
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制图表
plt.plot(x, y, label='sin(x)')
# 设置X轴和Y轴范围
plt.xlim(0, 10)
plt.ylim(-1, 1)
# 设置X轴和Y轴刻度
plt.xticks(np.arange(0, 11, 2))
plt.yticks([-1, -0.5, 0, 0.5, 1])
# 添加标题
plt.title('坐标系范围和刻度设置')
# 显示图例
plt.legend()
# 显示图表
plt.show()
plt.xlim(0, 10)
:通过plt.xlim()
函数,我们设置了X轴范围为0到10。plt.ylim(-1, 1)
:通过plt.ylim()
函数,我们设置了Y轴范围为-1到1。plt.xticks(np.arange(0, 11, 2))
:通过plt.xticks()
函数,我们设置了X轴的刻度为0到10,步长为2。plt.yticks([-1, -0.5, 0, 0.5, 1])
:通过plt.yticks()
函数,我们设置了Y轴的刻度为指定的值。
轴标签和标题
可以使用plt.xlabel()
和plt.ylabel()
函数设置X轴和Y轴的标签,使用plt.title()
函数设置标题。
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制图表
plt.plot(x, y, label='sin(x)')
# 设置X轴和Y轴标签
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 添加标题
plt.title('坐标系标签和标题设置')
# 显示图例
plt.legend()
# 显示图表
plt.show()
plt.xlabel('X轴')
:通过plt.xlabel()
函数,我们设置了X轴的标签。plt.ylabel('Y轴')
:通过plt.ylabel()
函数,我们设置了Y轴的标签。plt.title('坐标系标签和标题设置')
:通过plt.title()
函数,我们设置了图表的标题。
网格线设置
可以使用plt.grid()
函数来设置网格线的显示和样式。
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制图表
plt.plot(x, y, label='sin(x)')
# 启用网格线
plt.grid(True)
# 添加标题
plt.title('网格线设置')
# 显示图例
plt.legend()
# 显示图表
plt.show()
plt.grid(True)
:通过plt.grid()
函数,我们启用了网格线。
10.图形布局
子图分割和排列
使用plt.subplot()
函数来创建和排列子图。此函数的参数包括行数、列数和子图的索引。
import matplotlib.pyplot as plt
# 创建一个2x2的子图布局,选择第一个子图
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4])
plt.title('子图1')
# 选择第二个子图
plt.subplot(2, 2, 2)
plt.plot([4, 3, 2, 1])
plt.title('子图2')
# 选择第三个子图
plt.subplot(2, 2, 3)
plt.plot([1, 2, 1, 2])
plt.title('子图3')
# 选择第四个子图
plt.subplot(2, 2, 4)
plt.plot([2, 1, 2, 1])
plt.title('子图4')
# 调整子图间距
plt.tight_layout()
# 显示图表
plt.show()
在这个示例中,创建了一个2x2的子图布局,并在每个子图中绘制了不同的数据。plt.subplot()
函数用于选择要绘制的子图,使用plt.title()
函数为每个子图添加标题。plt.tight_layout()用于自动调整子图的间距,以确保它们适合图表。
坐标系网格布局
Matplotlib还允许在单个图形中创建多个坐标系,以更复杂的方式排列它们。
import matplotlib.pyplot as plt
# 创建一个包含2x2坐标系的图形
fig, axes = plt.subplots(2, 2)
# 在每个坐标系中绘制数据
axes[0, 0].plot([1, 2, 3, 4])
axes[0, 0].set_title('坐标系1')
axes[0, 1].plot([4, 3, 2, 1])
axes[0, 1].set_title('坐标系2')
axes[1, 0].plot([1, 2, 1, 2])
axes[1, 0].set_title('坐标系3')
axes[1, 1].plot([2, 1, 2, 1])
axes[1, 1].set_title('坐标系4')
# 调整子图间距
plt.tight_layout()
# 显示图表
plt.show()
在这个示例中,使用plt.subplots()
创建了一个包含2x2坐标系的图形,然后在每个坐标系中绘制了不同的数据。最后,plt.tight_layout()
用于自动调整坐标系之间的间距。
11.多轴图绘制
共享轴和独立轴
使用plt.subplots()
函数创建具有共享或独立轴的多轴图。
共享轴
import matplotlib.pyplot as plt
import numpy as np
# 创建一个具有共享X轴的多轴图
fig, axes = plt.subplots(2, 1, sharex=True)
# 绘制数据到不同子图
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
axes[0].plot(x, y1)
axes[0].set_title('共享X轴的子图1')
axes[1].plot(x, y2)
axes[1].set_title('共享X轴的子图2')
# 显示图表
plt.show()
在这个示例中,创建了一个具有共享X轴的多轴图,两个子图共享相同的X轴。
独立轴
import matplotlib.pyplot as plt
# 创建具有独立轴的多轴图
fig, axes = plt.subplots(1, 2, sharey=True)
# 绘制数据到不同子图
data1 = [1, 2, 3, 4, 5]
data2 = [5, 4, 3, 2, 1]
axes[0].plot(data1)
axes[0].set_title('独立Y轴的子图1')
axes[1].plot(data2)
axes[1].set_title('独立Y轴的子图2')
# 显示图表
plt.show()
在这个示例中,创建了一个具有独立Y轴的多轴图,两个子图具有不同的Y轴。
双坐标系图和次坐标轴
使用twinx()
函数创建双坐标系图,允许在同一图中绘制具有不同Y轴的数据。
import matplotlib.pyplot as plt
# 创建双坐标系图
fig, ax1 = plt.subplots()
data1 = [1, 2, 3, 4, 5]
data2 = [10, 8, 6, 4, 2]
# 绘制第一个数据集
ax1.plot(data1, color='skyblue', label='数据集1')
ax1.set_xlabel('X轴')
ax1.set_ylabel('Y轴1', color='skyblue')
ax1.legend(loc='upper left')
# 创建第二个Y轴
ax2 = ax1.twinx()
# 绘制第二个数据集
ax2.plot(data2, color='salmon', label='数据集2')
ax2.set_ylabel('Y轴2', color='salmon')
ax2.legend(loc='upper right')
# 添加标题
plt.title('双坐标系图')
# 显示图表
plt.show()
在这个示例中,创建了一个双坐标系图,同时绘制了两个数据集,每个数据集具有不同的Y轴。使用ax1.twinx()
来创建第二个Y轴,并在同一图中绘制两个数据集。
次坐标轴
使用secondary_xaxis()
和secondary_yaxis()
函数来创建次坐标轴,以表示不同尺度的数据。这通常用于在同一图中显示不同单位的数据。
12.高级图形元素
图形注释和箭头
使用plt.annotate()
函数添加图形注释和箭头。
import matplotlib.pyplot as plt
# 创建示例数据
x = [1, 2, 3]
y = [2, 4, 6]
# 绘制数据
plt.plot(x, y)
# 添加图形注释和箭头
plt.annotate('重要点', xy=(2, 4), xytext=(2.5, 5),
arrowprops=dict(arrowstyle='->', lw=1.5),
fontsize=12, color='red')
# 显示图表
plt.show()
在这个示例中,我们使用plt.annotate()
函数在数据点 (2, 4)
处添加了一个注释文本,并使用箭头指向 (2.5, 5)
处。
图例高级用法
Matplotlib的图例允许自定义图例的位置、标签、颜色等属性。
import matplotlib.pyplot as plt
# 创建示例数据
x = [1, 2, 3]
y1 = [2, 4, 6]
y2 = [3, 5, 7]
# 绘制数据
plt.plot(x, y1, label='数据集1', color='skyblue')
plt.plot(x, y2, label='数据集2', color='salmon')
# 自定义图例
plt.legend(loc='upper left', title='数据集', title_fontsize=12, fontsize=10)
# 显示图表
plt.show()
在这个示例中,使用plt.legend()
函数自定义了图例的位置、标题、标题字体大小和图例项的字体大小。
区域填充和阴影效果
使用fill_between()
函数来填充区域和创建阴影效果。
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 绘制数据
plt.plot(x, y1, label='sin(x)', color='skyblue')
plt.plot(x, y2, label='cos(x)', color='salmon')
# 填充区域
plt.fill_between(x, y1, y2, where=(y1 > y2), interpolate=True, color='lightgray', alpha=0.5, label='sin(x) > cos(x)')
# 自定义图例
plt.legend()
# 显示图表
plt.show()
在这个示例中,使用plt.fill_between()
函数填充了两个数据集之间 sin(x) > cos(x)
的区域,并为填充区域添加了颜色和透明度。添加了图例以标识填充区域。
13.3D数据可视化
三维散点图和曲面图
使用Axes3D
子模块来创建三维散点图和曲面图。
三维散点图
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建示例数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
# 创建三维散点图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c='b', marker='o', label='随机数据')
# 添加标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')
# 添加图例
ax.legend()
# 显示图表
plt.show()
在这个示例中,使用Axes3D
子模块创建了一个三维散点图,其中 x
、y
和 z
是随机生成的数据。
三维曲面图
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建示例数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
# 创建三维曲面图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis', label='三维曲面')
# 添加标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')
# 添加图例
ax.legend()
# 显示图表
plt.show()
在这个示例中,用Axes3D
子模块创建了一个三维曲面图,其中 x
和 y
是网格化的坐标,z
是一个函数的值。
等高线图和热力图
Matplotlib允许创建三维等高线图和热力图,用于可视化等高线和数据热力分布。
三维等高线图
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建示例数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
# 创建三维等高线图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.contour(x, y, z, cmap='viridis', levels=20)
# 添加标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')
# 显示图表
plt.show()
在这个示例中,用Axes3D
子模块创建了一个三维等高线图。
热力图
import matplotlib.pyplot as plt
import numpy as np
# 创建示例数据
data = np.random.rand(10, 10)
# 创建热力图
plt.imshow(data, cmap='coolwarm', interpolation='nearest')
plt.colorbar()
# 显示图表
plt.show()
这个示例演示了如何创建热力图,其中 data
是一个矩阵。
3D 动画和交互式控件
Matplotlib还支持3D动画和交互式控件,允许你创建交互式的三维图形。
14.图形导出和美化
导出图形文件
使用Matplotlib将图形保存为各种文件格式,如PNG、JPG、SVG、PDF等。
import matplotlib.pyplot as plt
# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 绘制数据
plt.plot(x, y, label='数据集')
# 自定义图形
plt.title('导出图形文件示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
# 保存图形为PNG文件
plt.savefig('sample_plot.png', dpi=300, bbox_inches='tight')
# 保存图形为PDF文件
plt.savefig('sample_plot.pdf', bbox_inches='tight')
# 显示图表
plt.show()
在这个示例中,用plt.savefig()
函数将图形保存为PNG和PDF文件,可以使用不同的文件扩展名来指定不同的文件格式。
图形风格设置
Matplotlib允许设置图形的风格,包括背景、网格线、字体和刻度等。
import matplotlib.pyplot as plt
# 设置图形风格
plt.style.use('seaborn-darkgrid')
# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 绘制数据
plt.plot(x, y, label='数据集')
# 自定义图形
plt.title('图形风格设置示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
# 显示图表
plt.show()
在这个示例中,用plt.style.use()
函数设置了图形的风格为seaborn-darkgrid
,选择不同的风格来自定义图形外观。
自定义色彩和配色方案
自定义色彩和配色方案,以满足特定的需求。
import matplotlib.pyplot as plt
# 自定义色彩和配色方案
colors = ['red', 'green', 'blue', 'orange', 'purple']
# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 绘制数据,使用自定义色彩
for i in range(len(x)):
plt.plot(x[i], y[i], label=f'数据点 {i+1}', color=colors[i])
# 自定义图形
plt.title('自定义色彩和配色方案示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
# 显示图表
plt.show()
在这个示例中,自定义的颜色列表colors
来为每个数据点选择不同的颜色。
参考
matplotlib官网:https://matplotlib.org/stable/users/index