一、极坐标
在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。通常情况下,M的极径坐标单位为1(长度单位),极角坐标单位为rad(或°)
二、matplotlib绘制极坐标图
1.创建极坐标图
matplotlib的pyplot子库提供了绘制极坐标图的方法,在调用subplot()创建子图时通过设置projection=\'polar\',便可创建一个极坐标子图,然后调用plot()在极坐标子图中绘图。
下面就创建一个极坐标子图和一个直角坐标子图进行对比。
import matplotlib.pyplot as plt
ax1 = plt.subplot(121, projection=\'polar\')
ax2 = plt.subplot(122)
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
2.极坐标图设置
dir()
命令可以得到一个对象的所有方法属性,通过比较ax1
与ax2
的方法属性便可知道极坐标有哪些设置方法。
>>> print(sorted(set(dir(ax1))-set(dir(ax2))))
[\'InvertedPolarTransform\', \'PolarAffine\', \'PolarTransform\', \'RadialLocator\', \'ThetaFormatter\', \'_default_rlabel_position\', \'_default_theta_direction\', \'_default_theta_offset\', \'_direction\', \'_r_label_position\', \'_theta_label1_position\', \'_theta_label2_position\', \'_theta_offset\', \'_xaxis_text1_transform\', \'_xaxis_text2_transform\', \'_yaxis_text_transform\', \'get_rlabel_position\', \'get_rmax\', \'get_rmin\', \'get_theta_direction\', \'get_theta_offset\', \'resolution\', \'set_rgrids\', \'set_rlabel_position\', \'set_rlim\', \'set_rmax\', \'set_rmin\', \'set_rscale\', \'set_rticks\', \'set_theta_direction\', \'set_theta_offset\', \'set_theta_zero_location\', \'set_thetagrids\', \'transProjection\', \'transProjectionAffine\', \'transPureProjection\']
2.1 极坐标正方向
set_theta_direction
方法用于设置极坐标的正方向
- 当
set_theta_direction
的参数值为1,\'counterclockwise\'或者是\'anticlockwise\'的时候,正方向为逆时针; - 当
set_theta_direction
的参数值为-1或者是\'clockwise\'的时候,正方向为顺时针; - 默认情况下正方向为逆时针
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax2.set_theta_direction(-1)
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
2.2 极坐标0°位置
set_theta_zero_location
方法用于设置极坐标0°位置
- 0°可设置在八个位置,分别为N, NW, W, SW, S, SE, E, NE
- 当
set_theta_zero_location
的参数值为\'N\',\'NW\',\'W\',\'SW\',\'S\',\'SE\',\'E\',\'NE\'时,0°分别对应的位置为方位N, NW, W, SW, S, SE, E, NE; - 默认情况下0°位于E方位
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax2.set_theta_zero_location(\'N\')
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
2.3极坐标角度网格线显示
set_thetagrids
方法用于设置极坐标角度网格线显示
- 参数为所要显示网格线的角度值列表
- 默认显示0°、45°、90°、135°、180°、225°、270°、315°的网格线
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax2.set_thetagrids(np.arange(0.0, 360.0, 30.0))
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
2.4极坐标角度偏离
set_theta_offset
方法用于设置角度偏离
- 参数值为弧度值数值
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax2.set_theta_offset(np.pi)
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
2.5极坐标极径网格线显示
set_rgrids
方法用于设置极径网格线显示
- 参数值为所要显示网格线的极径值列表,最小值不能小于等于0
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax2.set_rgrids(np.arange(0.2,1.0,0.4))
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
2.6极坐标极径标签位置
set_rlabel_position
方法用于设置极径标签显示位置
- 参数为标签所要显示在的角度
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax2.set_rlabel_position(\'90\')
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
2.7极坐标极径范围
set_rlim
方法用于设置显示的极径范围
- 参数为极径最小值,最大值
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax2.set_rlim(0.6,1.2)
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
2.8极坐标极径最大值
set_rmax
方法用于设置显示的极径最大值
- 该方法要在绘制完图像后使用才有效
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
ax2.set_rmax(0.6)
plt.show()
2.9极坐标极径最小值
set_rmin
方法用于设置显示的极径最小值
- 该方法要在绘制完图像后使用才有效
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
ax2.set_rmin(0.6)
plt.show()
2.10 极径对数坐标
set_rscale
方法用于设置极径对数坐标
- 参数值为\'linear\',\'log\',\'symlog\'
- 默认值为\'linear\'
- 该方法要在绘制完图像后使用才有效
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
ax2.set_rlim(math.pow(10,-1),math.pow(10,0))
ax1.set_rscale(\'linear\')
ax2.set_rscale(\'symlog\')
plt.show()
2.11 极坐标极径网格线显示范围
set_rticks
方法用于设置极径网格线的显示范围
import matplotlib.pyplot as plt
import numpy as np
theta=np.arange(0,2*np.pi,0.02)
ax1= plt.subplot(121, projection=\'polar\')
ax2= plt.subplot(122, projection=\'polar\')
ax2.set_rticks(np.arange(0.1, 0.9, 0.2))
ax1.plot(theta,theta/6,\'--\',lw=2)
ax2.plot(theta,theta/6,\'--\',lw=2)
plt.show()
想观看Matplotlib教学视频,了解更多Matplotlib实用技巧可关注
微信公众账号: MatplotlibClass
今日头条号:Matplotlib小讲堂