Python数据可视化第 9 讲:matplotlib极坐标图绘制函数polar

1. 极坐标

在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。通常情况下,M的极径坐标单位为1(长度单位),极角坐标单位为rad(或°)

2. polar 函数介绍

polar 函数用于绘制极坐标图。polar 函数的调用格式如下:

1
polar(theta, r, **kwargs)

参数说明:

  • theta:标量或标量序列,数据点的极径,必须参数。
  • r:标量或标量序列,数据点的极角,可选参数。如果不设置,则为长度为 len(theta) 默认序列替代 。
  • kwargs:Line2D 属性,可选参数,kwargs 用于指定线标签(用于自动图例)、线宽、标记面颜色等特性。

2. polar 函数绘图示例

2.2 绘制一个简单的极坐标图

绘制一个简单的极坐标图,完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt

# step1:准备画图的数据
xs = [1, 2, 3, 4, 5, 6, 7]

# step2:手动创建一个figure对象,相当于一个空白的画布
fig = plt.figure()
# step3:在画布上添加1个子块,标定绘图位置
ax = fig.add_subplot(1, 1, 1, projection='polar')
# step4: 绘制极坐标图
plt.polar(xs, 'ro')
ax.set_title('A simple polar example')
# 展示
plt.show()

上面代码的运行结果:

2.2 绘制一个极坐标图并标注点坐标

绘制一个极坐标图并标注点坐标,与第一个例子不同,为了分别给每个点标记坐标,需要循环在极坐标图上绘制数据点。完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import matplotlib.pyplot as plt
import numpy as np

# step1:准备画图的数据
xs = np.arange(7)
ys = xs ** 2

# step2:手动创建一个figure对象,相当于一个空白的画布
fig = plt.figure()
# step3:在画布上添加1个子块,标定绘图位置
ax = fig.add_subplot(1, 1, 1, projection='polar')
# step4:为了分别给每个点标记坐标,需要循环在极坐标图上绘制数据点
for x, y in zip(xs, ys):
    # 绘制极坐标图
    plt.polar(x, y, 'ro')
    # 增加文本说明,即每个点的极坐标
    plt.text(x, y, '%d, %d' % (int(x), int(y)),
             horizontalalignment='center',
             verticalalignment='bottom')

ax.set_title('A simple polar example')
# 展示
plt.show()

上面代码的运行结果:

3. plot 函数绘制极坐标图

matplotlib 的 pyplot 子库提供了绘制极坐标图的方法,在调用 subplot() 创建子图时通过设置 projection=‘polar’ 便可创建一个极坐标子图,然后调用 plot() 在极坐标子图中绘图。下面就创建一个极坐标子图和一个直角坐标子图进行对比。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt

# step1:准备画图的数据
theta = [1, 2, 3, 4, 5, 6, 7]

# step2:手动创建一个figure对象,相当于一个空白的画布
fig = plt.figure()
# step3:在画布上添加2个子块,标定绘图位置
ax1 = fig.add_subplot(1, 2, 1, projection='polar')  # 指定绘制极坐标图
ax2 = fig.add_subplot(1, 2, 2)
# step4: 绘图
ax1.plot(theta, theta, '--')
ax2.plot(theta, theta, '--')

# 展示
plt.show()

上面代码的运行结果: