建筑兔零基础自学python记录11|学画极坐标Polar plot

这次新学一个函数图——极坐标。先来复习一下极坐标的基本概念~

极坐标是一种二维坐标系统,用距离和角度来确定平面上点的位置。

在极坐标系统中,平面上的任意一点P可以用一对有序实数来表示,其中:

r(径向坐标):表示点到极点(类似于直角坐标系的原点)的距离。r的取值范围通常是 ,但在某些情况下也可以取负值。当 时,点P 的位置是在与 相反方向上距离极点的位置。(角坐标):表示从极轴按逆时针方向旋转到连接极点和点P的射线所形成的角度(通常是水平向右的射线,类似于直角坐标系的x 轴正半轴)的取值范围通常是 或 。

复习完毕我们来看一下下图这个极坐标怎么画~

老规矩先看下源代码:

import matplotlib.pyplot as plt

import numpy as np

r = np.arange(0, 2, 0.01)

theta = 2 * np.pi * r

fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})

ax.plot(theta, r)

ax.set_rmax(2)

ax.set_rticks([0.5, 1, 1.5, 2]) # Less radial ticks

ax.set_rlabel_position(-22.5) # Move radial labels away from plotted line

ax.grid(True)

ax.set_title("A line plot on a polar axis", va='bottom')

plt.show()

尝试理解代码:

(1)

r = np.arange(0, 2, 0.01)

theta = 2 * np.pi * r

这个应该就对应坐标点P。

r是距离,np.arange()我们在建筑兔零基础自学python记录7|学画阶梯图(step plot)-CSDN博客学过,复习后我们来解读一下r = np.arange(0, 2, 0.01)

r距离为x轴均匀间隔数值,从0到2(不包含2)间隔0.01

theta==

(2)极坐标创建方式

fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})

ax.plot(theta, r)

这里的fig, ax = plt.subplots() 我们是很熟悉的,之前都是这么写的。但括号里面的subplot_kw={'projection': 'polar'}从没见过。查询后:

subplot_kw:是一个字典,用于传递创建每个子图时的额外参数。

{'projection': 'polar'} 表示创建的子图使用极坐标投影。'polar' 表示极坐标

# 举例:创建一个图形,指定子图的背景颜色:浅灰色

fig, ax = plt.subplots(subplot_kw={'facecolor': 'lightgray'})

这里ax.plot(theta, r)极坐标的顺序是,角度在前,半径在后

(3)极坐标参数

ax.set_rmax(2)

ax.set_rticks([0.5, 1, 1.5, 2])

ax.set_rlabel_position(-22.5)

ax.set_rmax(2):半径的最大值为 2,即只显示半径 2 的部分

ax.set_rticks([0.5, 1, 1.5, 2]):设置径向刻度,只显示 0.5、1、1.5 和 2 ax.set_rlabel_position(-22.5):将径向标签的位置旋转 -22.5 度,避免标签与绘制的曲线重叠。

补充1:我们尝试取消刻度限制,可见每一个R都标注了数值

补充2:这里我们可以尝试取消更改半径位置,会出现重叠现象

当然也可以把角度换为90°

(4)标题

ax.set_title("A line plot on a polar axis", va='bottom')

这里的va='bottom'之前没遇到,查阅后:va='bottom' 表示标题垂直对齐方式为底部对齐。va 取值还有 'center'(居中对齐)和 'top'(顶部对齐),主要是涉及标题和图的对齐方式。

这里的用法涉及ax.set_title()中**kwargs:可以接受其他用于设置文本属性的关键字参数。用的不多,了解一下。

ax.set_title(label, fontdict=None, loc='center', pad=None, **kwargs)

以下为整个代码解读:

import matplotlib.pyplot as plt

import numpy as np

#r为从0到2(不包含2)间隔0.01的数,θ为2πr

r = np.arange(0, 2, 0.01)

theta = 2 * np.pi * r

#绘制极坐标图

fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})

ax.plot(theta, r)

#设定半径≤2,半径刻度[0.5, 1, 1.5, 2],半径刻度位置旋转-22.5°

ax.set_rmax(2)

ax.set_rticks([0.5, 1, 1.5, 2])

ax.set_rlabel_position(-22.5)

ax.grid(True)

#设标题"A line plot on a polar axis",底部对齐

ax.set_title("A line plot on a polar axis", va='bottom')

plt.show()

总结:

极坐标创建方式:

fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}) ax.plot(theta, r)

极坐标参数:

ax.set_rmax(2) 半径最大值 ax.set_rticks([0.5, 1, 1.5, 2]) 半径刻度 ax.set_rlabel_position(-22.5) 半径刻度位置

标题和图的对齐方式

va='bottom' 底部对齐。va 取值还有 'center'(居中对齐)和 'top'(顶部对齐)。