matplotlib 入门到入土
基础篇
Matplotlib是一个Python 2D绘图库,可以生成各种硬拷贝格式和跨平台的交互环境。下面是一些Matplotlib的基础使用教程。
1. 导入matplotlib库
import matplotlib.pyplot as plt
2. 绘制简单的图形
2.1 线性图
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
这将生成一个简单的线性图,这里我们只指定了y轴的值,x轴的值默认为索引值。
2.2 散点图
import matplotlib.pyplot as plt
plt.scatter([1, 2, 3, 4, 5], [2, 3, 5, 7, 11])
plt.show()
这将生成一个简单的散点图,指定了x和y的值。
3. 自定义图形
3.1 改变颜色和线型
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.show()
在这里,‘ro’是一个字符串,表示’r’(红色)和’o’(圆圈标记)。
3.2 设置坐标轴范围
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()
在这里,axis
方法接受一个列表,表示[xmin, xmax, ymin, ymax]。
4. 使用numpy数组
Matplotlib接受numpy数组作为输入,实际上这是它的标准输入类型。
import numpy as np
import matplotlib.pyplot as plt
# evenly sampled time at 200ms intervals
t = np.arange(0., 5., 0.2)
# red dashes, blue squares and green triangles
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()
这里我们生成了三个不同的图形在一个图上,使用了numpy数组和不同的颜色和标记。
5. 创建子图
import numpy as np
import matplotlib.pyplot as plt
# Some example data to display
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, axs = plt.subplots(2)
fig.suptitle('Vertically stacked subplots')
axs[0].plot(x, y)
axs[1].plot(x, -y)
plt.show()
使用subplots
函数可以创建一个或多个子图。
以上是matplotlib的一些基础内容。你可以通过matplotlib官方文档或其他教程进一步学习更多内容,例如多维数据的可视化,复杂布局的创建等等。
进阶篇
当然,让我们深入一些更高级的用法,包括样式管理、颜色条、3D绘图、动画等。
1. 样式管理
Matplotlib有一套预定义好的样式供我们使用,也可以自定义样式。以下是如何改变样式的例子:
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('ggplot') # 使用'ggplot'样式
x = np.linspace(0, 10, 100)
y = np.cos(x)
plt.plot(x, y)
plt.show()
2. 颜色条
颜色条对于一些带有颜色映射的图表非常有用。例如,我们绘制一个heatmap,然后添加一个颜色条:
import numpy as np
import matplotlib.pyplot as plt
# Generate some data
x = np.random.rand(10, 10)
# Generate a heatmap
plt.imshow(x, cmap='hot', interpolation='nearest')
# Add a colorbar
plt.colorbar()
plt.show()
3. 3D绘图
Matplotlib支持3D绘图。要创建一个3D图形,我们首先需要创建一个3D轴,然后在该轴上进行绘图。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Generate some 3D sample data
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
# Create a 3D scatter plot
ax.scatter(x, y, z)
plt.show()
4. 动画
Matplotlib还支持生成动画。这是一个简单的例子:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'r-')
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
return ln,
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=True)
plt.show()
以上就是一些matplotlib的高级用法,您可以查看matplotlib的官方文档,获取更多详细的信息和更多的示例。
大师篇
Matplotlib是一个非常强大的库,可用于创建各种复杂的图形和可视化。让我们探索一些更高级的特性,如多坐标轴图、自定义标注和图例,以及使用gridspec
自定义subplot布局。
1. 多坐标轴图
在一个图中创建多个y轴是可能的。这在你想要在同一个图中表示具有不同尺度的数据时很有用。
import numpy as np
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label and tick labels match the line color.
ax1.set_ylabel('exp', color='b')
for tl in ax1.get_yticklabels():
tl.set_color('b')
ax2 = ax1.twinx()
s2 = np.sin(2*np.pi*t)
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('sin', color='r')
for tl in ax2.get_yticklabels():
tl.set_color('r')
plt.show()
2. 自定义标注和图例
你可以在图上添加文本,箭头,以及其他类型的标注。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = ax.plot(t, s, lw=2)
ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)
ax.set_ylim(-2,2)
plt.show()
3. 使用gridspec
自定义subplot布局
使用gridspec
模块,你可以更加精细地控制subplot的布局。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[-1, 0])
ax5 = plt.subplot(gs[-1, -2])
fig.tight_layout()
plt.show()
在上述代码中,我们创建了一个3x3的grid,然后放置了五个subplots。注意gs[i, j]
是使用基于0的索引。
这些只是Matplotlib高级功能的一部分,为了充分利用这个库,最好参阅Matplotlib的官方文档,它提供了大量的教程和例子。
探索篇
好的,以下是一些更深入的Matplotlib用法,涵盖了绘制复杂的图像,如填充区域、绘制误差条、定制的图像标注等。
1. 绘制并填充区域
你可以使用fill_between
函数在两条线之间填充区域。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 1, 500)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x)
fig, ax = plt.subplots()
ax.fill(x, y, zorder=10)
ax.grid(True, zorder=5)
plt.show()
2. 绘制误差条
当你的数据有误差范围时,可以使用误差条来显示这些信息。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 50)
dy = 0.8
y = np.sin(x) + dy * np.random.randn(50)
plt.errorbar(x, y, yerr=dy, fmt='.k')
plt.show()
3. 定制图像标注
你可以使用text函数在图像上添加自定义标注。这个函数有很多选项来调整文本的外观,包括字体大小、文本框样式等。
import numpy as np
import matplotlib.pyplot as plt
ax = plt.subplot(111)
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = ax.plot(t, s, lw=2)
ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)
ax.text(0.95, 0.01, 'colored text in axes coords',
verticalalignment='bottom', horizontalalignment='right',
transform=ax.transAxes,
color='green', fontsize=15)
plt.show()
4. 高级三维图像
你可以创建更复杂的三维图像,例如曲面图。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, color='b')
plt.show()
以上只是一些例子,Matplotlib的功能远不止这些,可以查看Matplotlib的官方文档来获取更详细的信息和教程。