1.绘制极坐标线形图:
matplotlib.pyplot.polar(<theta>,<r>[,**kwargs])
#也用于创建极坐标绘图区
#参数说明:
theta:指定θ坐标,单位为弧度;为数组
#起始位置为正右方,>0表示逆时针旋转,<0表示顺时针旋转
r:指定r坐标;为数组
kwargs:指定其他参数(见下表1,即下图1~2)
>>> import numpy as np
>>> import matplotlib.pyplot as plt
#设置画布大小:
>>> plt.figure(figsize=(8.0,6.0))
<Figure size 800x600 with 0 Axes>
#设置3个数据,theta为点位置的弧度参数,r为点的半径坐标
>>> theta1=np.array([1.25*np.pi,np.pi/2,0])
>>> theta2=np.array([-np.pi/6,-np.pi/2,0,np.pi/2,np.pi])
>>> theta3=np.arange(0,2*np.pi,0.5)
>>> r1=np.array([4,2,3])
>>> r2=np.array([5,2,4,5,3])
>>> r3=np.random.randint(0,5,13)
#绘制第1个极坐标图:标记样式为细菱形,大小为8,点间的连线样式为":"
>>> plt.polar(theta1,r1,marker='d',ms=8,ls=':',label='数据一')
[<matplotlib.lines.Line2D object at 0x0000017790B9CEC8>]
#填充第1个极坐标图,填充颜色为蓝色,透明度0.3
>>> plt.fill(theta1,r1,color='b',alpha=0.3)
[<matplotlib.patches.Polygon object at 0x0000017790BA9E08>]
#绘制第2个极坐标图,将marker/linestyle/color组合起来以str形式传入
>>> plt.polar(theta2,r2,'*-g',ms=10,label='数据二')
[<matplotlib.lines.Line2D object at 0x0000017790B98B88>]
#绘制第3个极坐标图,设置linestyle=none(点与点之间不相连)
>>> plt.polar(theta3,r3, marker='o',ls='none',ms=8,color='r',label='数据三')
[<matplotlib.lines.Line2D object at 0x0000017791D28B48>]
>>> plt.show()
先调用plt.polar(),再调用plt.fill()
#调用plt.polar()是为了将坐标区转换为极坐标区
如果想改变雷达图边线的属性,可以先使用plt.polar()绘制,再使用plt.fill()填充
#实例:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> plt.figure(figsize=(8.0,6.0))
<Figure size 800x600 with 0 Axes>
>>> theta=np.linspace(0,2*np.pi,6,endpoint=False)
>>> data1=np.array([9,4,3,5,2,8])
>>> data2=np.array([3,6,9,6,3,2])
>>> plt.polar()
[]
>>> plt.fill(theta,data1,color='b',alpha=0.3)
[<matplotlib.patches.Polygon object at 0x000001D16F3CAF88>]
>>> plt.fill(theta,data2,color='r',alpha=0.3)
[<matplotlib.patches.Polygon object at 0x000001D16F3CA148>]
>>> labels=np.array(['Python','Golang','Java','C++','PHP','JavaScript'])
>>> plt.thetagrids(theta*180/np.pi,labels)
(<a list of 14 Line2D ticklines objects>, <a list of 7 Text major ticklabel objects>)
>>> plt.show()
使用plt.polar()并设置ls='none'
#实例:参见 1
(2)方法1:
先用plt.polar()创建极坐标区,再用plt.scatter()绘制散点图
#实例:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> N=50
>>> r=2*np.random.rand(N)
>>> theta=2*np.pi*np.random.rand(N)
>>> size=200*r**2
>>> colors=N*np.random.rand(N)
>>> plt.polar()
[]
>>> plt.scatter(theta,r,s=size,c=colors,alpha=0.8)
<matplotlib.collections.PathCollection object at 0x000001D17024BA88>
>>> plt.title('极坐标散点图示例一',pad=15)
Text(0.5, 1.05, '极坐标散点图示例一')
>>> plt.show()#结果见下图
先用plt.subplot()添加极坐标子区(设置projection='polar'),再用plt.scatter()绘制散点图
#实例:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> N=50
>>> r=2*np.random.rand(N)
>>> theta=2*np.pi*np.random.rand(N)
>>> size=200*r**2
>>> colors=N*np.random.rand(N)
>>> plt.subplot(111,projection='polar')
<matplotlib.axes._subplots.PolarAxesSubplot object at 0x000001D170234448>
>>> plt.scatter(theta,r,s=size,c=colors,alpha=0.8)
<matplotlib.collections.PathCollection object at 0x000001D1703F7188>
>>> plt.title('极坐标散点图示例二',pad=15)
Text(0.5, 1.05, '极坐标散点图示例二')
>>> plt.show()#结果见下图
先用plt.axes()设置projection='polar'或polar=True(使用极坐标),再用plt.scatter()绘制散点图
#实例:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> N=50
>>> r=2*np.random.rand(N)
>>> theta=2*np.pi*np.random.rand(N)
>>> size=200*r**2
>>> colors=N*np.random.rand(N)
>>> #plt.axes(polar=True)
... plt.axes(projection='polar')
<matplotlib.axes._subplots.PolarAxesSubplot object at 0x000001D17009CC08>
>>> plt.scatter(theta,r,s=size,c=colors,alpha=0.8)
<matplotlib.collections.PathCollection object at 0x000001D170592C48>
>>> plt.title('极坐标散点图示例三',pad=15)
Text(0.5, 1.05, '极坐标散点图示例三')
>>> plt.show()#结果见下图
方法类似极坐标散点图,即plt.bar()与plt.polar()/plt.subplot()/plt.axes三者之一的结合使用
#实例:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> r=np.random.rand(8)
>>> theta=np.arange(0,2*np.pi,2*np.pi/8)
>>> colors=np.array(['#4bb2c5','#c5b47f','#EAA228','#579575','#839557','#958c12','#953579','#4b5de4'])
>>> plt.polar()
[]
>>> plt.bar(theta,r,color=colors,alpha=0.8)
<BarContainer object of 8 artists>
>>> plt.show()#结果见下图