Matplotlib绘图举例

本文主要介绍如何用Matplotlib绘制简单的图形,特别需要理解子图(subplot)的用法


Matplotlib是Python的绘图工具的核心,功能十分强大,可以实现各种各样的效果,而功能强大的弊端便是学习成本较高。Matplotlib绘图参数众多,要想全部掌握这些参数的用法可能性不大,较好的方法是先掌握几个核心图形的绘制技巧,比如散点图、曲线图、直方图等等,还有就是子图(subplot)的概念。

子图是允许在一张图片中同时绘制多个不同的图形,这样绘制出来的图片比较适合对比,使决策者能够在较短时间内了解事件的全局。

一个2×2的子图

一个2×2的子图

散点图、曲线图、直方图、subplot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
# 散点图1
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
# 散点图2
n = 10
X = np.random.uniform(0, 1, n)
Y = np.random.uniform(0, 10, n)
area = np.pi * (15 * np.random.rand(n))**2
# 曲线图
A = np.linspace(-np.pi, np.pi, 256, endpoint=True) # np.linspace(x, y)设定变量的取值范围
C, S = np.cos(A), np.sin(A)
# 直方图
x_1 = np.arange(-10, +10, dtype=int)
y_1 = np.random.normal(0, 1, 1000) # 生成1000个服从(0,1)分布的随机数
# 散点图1-子图(2, 2, 1)
plt.subplot(221)
plt.title('scatter plot with area', fontsize=16, fontweight='bold') # plt.title()给子图添加标题
plt.xticks([-0.1, 0, +1])
plt.yticks([-0.1, 0, +1]) # 设置x轴、y轴的刻度
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
# 散点图2-子图(2, 2, 2)
plt.subplot(222)
plt.title('scatter plot', fontsize=16, fontweight='bold')
plt.scatter(X, Y)
# 曲线图-子图(2, 2, 3)
plt.subplot(223)
plt.plot(A, C)
plt.plot(A, S)
# 给子图(2, 2, 3)添加图例
plt.plot(A, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(A, S, color="red", linewidth=2.5, linestyle="-", label="sine")
plt.legend(loc='upper left', frameon=False)
# 直方图-子图(2, 2, 4)
plt.subplot(224)
plt.hist(y_1, 20, normed=False)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.xlim(-10, +10) # 设定x轴的取值范围
plt.show()
Figure 1

Figure 1

饼图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mport numpy as np
import matplotlib.pyplot as plt
# 饼图
ax = plt.axes([0.025, 0.025, 0.95, 0.95], polar=True)
N = 20
theta = np.arange(0.0, 2*np.pi, 2*np.pi/N)
radii = 10*np.random.rand(N) # 生成1到10的随机数
width = np.pi/4*np.random.rand(N)
bars = plt.bar(theta, radii, width=width, bottom=0.0)
for r, bar in zip(radii, bars):
bar.set_facecolor(plt.cm.jet(r/10.))
bar.set_alpha(0.5)
ax.set_xticklabels([])
ax.set_yticklabels([])
plt.show()
Figure 2

Figure 2


参考

  1. http://www.labri.fr/perso/nrougier/teaching/matplotlib/
觉得还不错?帮我赞助点域名费吧:)