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

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

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

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

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

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

 老规矩先看下源代码:

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\left ( r,\theta \right )

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

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

theta=\theta=2\pi r

(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,即只显示半径\leq 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'(顶部对齐)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值