Matplotlib是Python强大的数据可视化工具库,类似于MATLAB语言。Mat-lotlib提供了一整套与MATLAB相似的命令API,十分适合进行交互式制图,而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
Matplotlib是神经生物学家John D.Hunter于2007年创建的,其函数设计参考了MATLAB。
折线图
基础折线图
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y) # 绘制折线图
plt.show() # 显示图表
折线图样式
plt.plot()
函数常见参数及其缩写
- x, y:
- 折线图的 X 轴和 Y 轴数据。
- color (
c
):- 折线的颜色。
- 可以是颜色名称(如
'red'
)、颜色缩写(如'r'
)或者 RGB 十六进制值(如'#FF5733'
)。
- linestyle (
ls
):- 折线的线型。
- 可选值包括
'-'
(实线,默认)、'--'
(虚线)、':'
(点线)、'-.'
(点划线)。
- linewidth (
lw
):- 折线的宽度。
- 数值型,表示折线的粗细,默认值是 1。
- marker:
- 数据点的标记样式。
- 可选值包括
'o'
(圆圈)、'^'
(三角形)、's'
(正方形)、'*'
(星号)等。
- markersize (
ms
):- 数据点的大小。
- 数值型,表示数据点的直径大小。
- markerfacecolor (
mfc
) / markeredgecolor (mec
):- 数据点标记的填充颜色和边缘颜色。
- label:
- 折线的标签,用于图例的显示。
- alpha:
- 折线的透明度。
- 可以是 0 到 1 之间的值,0 表示完全透明,1 表示完全不透明
以下是Matplotlib中常用的颜色、线型和标记样式参数的表格展示:
颜色参数
颜色名称 | 颜色代码 |
---|---|
蓝色 | 'b' |
绿色 | 'g' |
红色 | 'r' |
青色 | 'c' |
洋红色 | 'm' |
黄色 | 'y' |
黑色 | 'k' |
白色 | 'w' |
颜色名称 | 颜色代码 |
-------- | -------- |
蓝色 | 'blue' |
绿色 | 'green' |
红色 | 'red' |
青色 | 'cyan' |
洋红色 | 'magenta' |
黄色 | 'yellow' |
黑色 | 'black' |
白色 | 'white' |
灰色 | 'gray' |
橙色 | 'orange' |
粉色 | 'pink' |
紫色 | 'purple' |
棕色 | 'brown' |
线型参数
线型说明 | 线型代码 |
---|---|
实线 | '-' |
虚线 | '--' |
点线 | ':' |
点划线 | '-.' |
标记样式参数
标记说明 | 标记代码 |
---|---|
点 | '.' |
圆圈 | 'o' |
叉号 | 'x' |
加号 | '+' |
星号 | '*' |
方块 | 's' |
三角形 | '^' |
倒三角形 | 'v' |
左三角形 | '<' |
右三角形 | '>' |
六边形1 | 'h' |
六边形2 | 'H' |
五角形 | 'p' |
垂直线 | `’ |
水平线 | '_' |
添加标题和标签
可以为图表添加标题、X轴和Y轴的标签。
plt.plot(x, y)
plt.title('Simple Line Plot') # 标题
plt.xlabel('X Axis Label') # X轴标签
plt.ylabel('Y Axis Label') # Y轴标签
plt.show()
添加网格线
可以添加网格线以便于读取数据。
plt.plot(x, y)
plt.grid(True) # 添加网格线
plt.show()
plt.grid()
常用参数:
which
:指定网格线类型,可以是'major'
(主要刻度)或者'minor'
(次要刻度)axis
:指定在哪个轴上添加网格线,可以是'both'
(默认,同时添加X和Y轴的网格线)、'x'
(只在X轴上添加)、'y'
(只在Y轴上添加)。
设置坐标轴范围
可以设置X轴和Y轴的显示范围。
plt.plot(x, y)
plt.xlim(0, 5) # X轴范围
plt.ylim(0, 20) # Y轴范围
plt.show()
设置刻度和刻度标签
可以设置刻度的值和标签。
plt.plot(x, y)
plt.xticks([1, 2, 3, 4], ['one', 'two', 'three', 'four']) # 设置X轴刻度标签
plt.yticks([1, 4, 9, 16], ['one', 'four', 'nine', 'sixteen']) # 设置Y轴刻度标签
plt.show()
保存图表
可以将图表保存为图像文件。
plt.plot(x, y)
plt.savefig('line_plot.png') # 保存为PNG文件
多子图绘制
可以在同一个图中绘制多个子图。
# 创建一个2x1的子图
plt.subplot(2, 1, 1)
plt.plot(x, y)
plt.title('First Subplot')
plt.subplot(2, 1, 2)
plt.plot(x, y)
plt.title('Second Subplot')
plt.tight_layout() # 自动调整子图之间的间距
plt.show()
散点图
基础散点图
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
plt.scatter(x, y) # 绘制散点图
plt.show()
散点图样式
- x, y:
- 必需的参数,分别是散点图的 X 轴和 Y 轴数据。
- s:
- 散点的大小。
- 可以是单个数值表示所有散点的大小,也可以是一个数组,指定每个散点的大小。
- 示例:
plt.scatter(x, y, s=100)
或plt.scatter(x, y, s=sizes)
,其中sizes
是一个与数据长度相同的数组。
- c:
- 散点的颜色。
- 可以是颜色名称(如
'red'
)、颜色缩写(如'r'
)或者 RGB 十六进制值(如'#FF5733'
)。 - 示例:
plt.scatter(x, y, c='blue')
- marker:
- 散点的标记样式。
- 可选值包括
'o'
(圆圈,默认)、'^'
(三角形)、's'
(正方形)、'*'
(星号)等。 - 示例:
plt.scatter(x, y, marker='o')
- alpha:
- 散点的透明度。
- 可以是 0 到 1 之间的值,0 表示完全透明,1 表示完全不透明。
- 示例:
plt.scatter(x, y, alpha=0.5)
- linewidths (
lw
) 和 edgecolors (ec
):- 控制散点边缘的线宽和颜色。
linewidths
可以设置边缘的线宽,edgecolors
可以设置边缘的颜色。- 示例:
plt.scatter(x, y, lw=2, ec='black')
- label:
- 散点图的标签,用于图例的显示。
# 生成随机数据
np.random.seed(0)
x = np.random.rand(50)
y = np.random.rand(50)
sizes = np.random.rand(50) * 100 # 随机生成散点的大小
colors = np.random.rand(50) # 随机生成散点的颜色
plt.scatter(x, y, s=sizes, c=colors, alpha=0.7, marker='o', label='Random Data') # 绘制散点图
# 添加标题和标签
plt.title('Scatter Plot Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.legend() # 添加图例
plt.show() # 显示图形
三维折线图
import matplotlib.pyplot as plt
import numpy as np
# 创建一个 Figure 对象和 3D Axes 对象
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
# 生成曲线上的数据
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
# 绘制曲线
ax.plot(x, y, z, label='3D Spiral Curve')
# 添加标题和标签
ax.set_title('3D Spiral Curve Plot')
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
ax.legend() # 添加图例
plt.show() # 显示图形
三维曲面图
import matplotlib.pyplot as plt
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))
# 创建一个 Figure 对象和 3D Axes 对象
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
# 绘制三维曲面图
ax.plot_surface(x, y, z, cmap='viridis')
# 添加标题和标签
ax.set_title('3D Surface Plot')
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
# 显示图形
plt.show()
柱状图
import matplotlib.pyplot as plt
import numpy as np
# 数据
categories = ['A', 'B', 'C', 'D']
values = [7, 13, 5, 17]
# 创建柱状图
plt.figure(figsize=(8, 6))
plt.bar(categories, values, color='skyblue')
# 添加标题和标签
plt.title('Simple Bar Plot')
plt.xlabel('Categories')
plt.ylabel('Values')
# 显示图形
plt.show()
直方图
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据(正态分布)
data = np.random.randn(1000)
# 创建直方图
plt.figure(figsize=(8, 6))
plt.hist(data, bins=30, edgecolor='black')
# 添加标题和标签
plt.title('Histogram of Random Data')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 显示图形
plt.show()
饼图
import matplotlib.pyplot as plt
# 数据
sizes = [25, 30, 20, 15, 10] # 每一部分的大小
labels = ['A', 'B', 'C', 'D', 'E'] # 每一部分的标签
# 创建饼图
plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
# 添加标题
plt.title('Simple Pie Chart')
# 显示图形
plt.show()
等高线图
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(-3.0, 3.0, 100)
y = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建填充等高线图
plt.figure(figsize=(8, 6))
plt.contourf(X, Y, Z, levels=20, cmap='RdGy')
# 添加颜色栏
plt.colorbar(label='Value')
# 添加标题和标签
plt.title('Filled Contour Plot')
plt.xlabel('X axis')
plt.ylabel('Y axis')
# 显示图形
plt.show()
箱线图
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
# 创建箱线图
plt.figure(figsize=(8, 6))
plt.boxplot(data)
# 添加标题和标签
plt.title('Box Plot')
plt.xticks([1, 2, 3], ['Data 1', 'Data 2', 'Data 3'])
plt.ylabel('Value')
# 显示图形
plt.show()
热图
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
data = np.random.rand(10, 12)
# 创建热图
plt.figure(figsize=(8, 6))
plt.imshow(data, cmap='hot', interpolation='nearest')
# 添加颜色栏
plt.colorbar()
# 添加标题和标签
plt.title('Heatmap')
plt.xlabel('X axis')
plt.ylabel('Y axis')
# 显示图形
plt.show()
误差图
import matplotlib.pyplot as plt
import numpy as np
# 数据
x = np.linspace(0, 10, 10)
y = np.sin(x)
yerr = 0.2 # 统一的误差范围
# 创建误差图
plt.figure(figsize=(8, 6))
plt.errorbar(x, y, yerr=yerr, fmt='o', label='Data with Error Bars')
# 添加标题和标签
plt.title('Error Bar Plot')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.legend()
# 显示图形
plt.show()