Matplotlib示例
Matplotlib是一个用于创建图形的Python库。它可以用来绘制各种类型的图表,包括线图、散点图、直方图、饼图等。在本文中,我将为您介绍一些Matplotlib的常见用法,并提供一些示例代码。
绘制简单线图
首先,让我们来绘制一个简单的线图。下面的代码将创建一个包含10个数据点的线图,并显示在屏幕上。
import matplotlib.pyplot as plt
x = range(10)
y = [i*2 for i in x]
plt.plot(x, y)
plt.show()
Output:
绘制散点图
接下来,让我们来绘制一个散点图。下面的代码将创建一个包含10个数据点的散点图,并显示在屏幕上。
import matplotlib.pyplot as plt
x = range(10)
y = [i*2 for i in x]
plt.scatter(x, y)
plt.show()
Output:
绘制直方图
直方图是用来展示数据分布的一种常见图表类型。下面的代码将创建一个包含1000个随机数的直方图,并显示在屏幕上。
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
plt.hist(data, bins=30)
plt.show()
Output:
绘制饼图
饼图用来显示数据的相对比例。下面的代码将创建一个简单的饼图,并显示在屏幕上。
import matplotlib.pyplot as plt
sizes = [25, 35, 20, 20]
labels = ['A', 'B', 'C', 'D']
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.show()
Output:
自定义图表样式
您可以通过一些方法来自定义Matplotlib图表的样式,包括线条颜色、标记形状和图例等。下面的代码演示了如何自定义线图的样式。
import matplotlib.pyplot as plt
x = range(10)
y1 = [i*2 for i in x]
y2 = [i*2+1 for i in x]
plt.plot(x, y1, linestyle='-', color='blue', marker='o', label='Line 1')
plt.plot(x, y2, linestyle='--', color='red', marker='s', label='Line 2')
plt.legend()
plt.show()
Output:
添加标题和标签
为了让图表更具可读性,您可以添加标题、轴标签和图例等。下面的代码演示了如何为一个饼图添加标题和图例。
import matplotlib.pyplot as plt
sizes = [25, 35, 20, 20]
labels = ['A', 'B', 'C', 'D']
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('Pie Chart Example')
plt.legend(loc='upper left')
plt.show()
Output:
子图
有时候需要在一个图像中显示多个子图,这时可以使用Matplotlib的subplots
方法。下面的代码演示了如何创建一个包含2个子图的图像。
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 2)
axs[0].plot(range(10), [i*2 for i in range(10)])
axs[0].set_title('Subplot 1')
axs[1].scatter(range(10), [i*2 for i in range(10)])
axs[1].set_title('Subplot 2')
plt.show()
Output:
3D图
Matplotlib还支持绘制3D图表,包括3D线图、3D散点图和3D曲面图等。下面的代码演示了如何创建一个3D散点图。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)
ax.scatter(x, y, z)
plt.show()
Output:
绘制多个数据系列
有时候需要在同一个图中绘制多个数据系列,这时可以通过多次调用plot
方法来实现。下面的代码演示了如何在同一个图中绘制两个数据系列。
import matplotlib.pyplot as plt
x = range(10)
y1 = [i*2 for i in x]
y2 = [i*2+1 for i in x]
plt.plot(x, y1, color='blue', label='Series 1')
plt.plot(x, y2, color='red', label='Series 2')
plt.legend()
plt.show()
Output:
绘制误差条
有时候需要在图表中显示数据的误差范围,这时可以使用errorbar
方法。下面的代码演示了如何绘制一个包含误差条的散点图。
import matplotlib.pyplot as plt
x = range(10)
y = [i*2 for i in x]
yerr = [1]*10
plt.errorbar(x, y, yerr=yerr, fmt='o')
plt.show()
Output:
自定义坐标轴
您可以通过一些方法来自定义图表的坐标轴,包括设置坐标轴的范围、刻度和标签等。下面的代码演示了如何自定义坐标轴。
import matplotlib.pyplot as plt
x = range(10)
y = [i*2 for i in x]
plt.plot(x, y)
plt.xlim(0, 15)
plt.ylim(0, 30)
plt.xticks(range(0, 16, 5))
plt.yticks(range(0, 31, 10))
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()
Output:
多个子图网格
除了使用subplots
方法创建包含多个子图的图像外,还可以使用subplot2grid
方法来创建更复杂的子图网格。下面的代码演示了如何创建一个包含多个子图的网格。
import matplotlib.pyplot as plt
plt.subplot2grid((3, 3), (0, 0), rowspan=2, colspan=2)
plt.plot(range(10), [i*2 for i in range(10)])
plt.subplot2grid((3, 3), (0, 2))
plt.scatter(range(10), [i*2 for i in range(10)])
plt.subplot2grid((3, 3), (1, 2), rowspan=2)
plt.hist(range(10))
plt.show()
Output:
使用样式表
Matplotlib提供了一些内置的样式表,可以用来快速修改图表的样式。您可以通过plt.style.use()
方法来应用样式表。下面的代码演示了如何使用内置样式表ggplot
来修改图表样式。
import matplotlib.pyplot as plt
plt.style.use('ggplot')
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
plt.scatter(x, y)
plt.show()
Output:
添加注释
在图表中添加注释可以帮助解释数据,提高图表的可读性。下面的代码演示了如何在一个散点图中添加注释。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
plt.scatter(x, y)
for i in range(len(x)):
plt.text(x[i], y[i], f'({x[i]}, {y[i]})', fontsize=12, ha='right')
plt.show()
Output:
实时更新图表
有时候需要在程序运行过程中实时更新图表,这时可以使用pause
方法来暂停图表的显示。下面的代码演示了如何实时更新一个直方图。
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
plt.ion()
fig, ax = plt.subplots()
for i in range(100):
ax.clear()
ax.hist(data[:i*10], bins=30)
plt.pause(0.1)
plt.ioff()
plt.show()