使用matplotlib.pyplot绘制圆形多级雷达图,即在一组同心圆上填充不规则六边形,某个顶点到圆心的距离代表人物数据的某个属性。雷达图(也称为蜘蛛图或星形图)是一种可视化视图,指一种可以直观展现对象多属性的差异的图像。
第一步:导入库
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
numpy
是一个用于数值计算的库,通常简称为np
。matplotlib.pyplot
是 Matplotlib 的一个子模块,它提供了一个类似于 MATLAB 的绘图框架,通常简称为plt
。matplotlib
是 Python 的一个绘图库。
第二步:设置中文字体
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
这两行代码是为了确保在图表中可以显示中文字符。'SimHei' 是一个常用于 Windows 的中文字体。
第三步:定义标签和数据
labels = np.array(['综合','KDA','发育','推进','生存','输出'])
nAttr = 6
data = np.array([7,5,6,9,8,7])
labels
是一个包含六个中文字符串的 NumPy 数组,代表不同的能力值标签。nAttr
是一个整数,表示属性的数量(这里为6)。data
是一个包含六个整数值的 NumPy 数组,代表每个能力值的评分。
第四步:计算角度
angles = np.linspace(0,2*np.pi,nAttr,endpoint=False)
使用 np.linspace
函数计算从 0 到 2π 的等差数列,但不包括 2π。这是因为雷达图是一个闭环,最后一个点和第一个点应该相连。
第五步:创建图表
fig = plt.figure(facecolor = "white")
plt.subplot(111,polar=True)
plt.figure(facecolor = "white")
创建一个新的图表,背景色为白色。plt.subplot(111,polar=True)
在图表上添加一个子图,并设置其为极坐标(即雷达图)。
第六步:绘制雷达图
plt.plot(angles,data,'bo-',color='g',linewidth=2)
plt.fill(angles,data,facecolor = 'g',alpha = 0.25)
plt.plot
用于绘制连线,其中'bo-'
表示线型(绿色线条,带圆形标记,并连线)。但由于color='g'
已经指定了绿色,所以'bo-'
中的颜色代码 'b' 被忽略。plt.fill
用于填充雷达图的区域,alpha=0.25
表示填充颜色的透明度。
第七步:设置标签和标题
plt.thetagrids(angles*180/np.pi,labels)
plt.figtext(0.25,0.95,'DOTA能力值雷达图',ha = 'center')
plt.thetagrids
用于设置极坐标图的角度标签。由于angles
是以弧度为单位的,所以需要乘以180/np.pi
转换为角度。plt.figtext
用于在图表上添加文本,这里添加的是标题“DOTA能力值雷达图”。
第八步:显示网格和保存图表
plt.grid(True)
plt.savefig('dota_radar.JPG')
plt.grid(True)
显示网格线。plt.savefig('dota_radar.JPG')
将图表保存为 JPG 文件。
第九步:显示图表
plt.show()
最后,这行代码会在屏幕上显示图表。
结果如图所示:
代码如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
labels = np.array(['综合','KDA','发育','推进','生存','输出'])
nAttr = 6
data = np.array([7,5,6,9,8,7])
angles = np.linspace(0,2*np.pi,nAttr,endpoint=False)
fig = plt.figure(facecolor = "white")
plt.subplot(111,polar=True)
plt.plot(angles,data,'bo-',color='g',linewidth=2)
plt.fill(angles,data,facecolor = 'g',alpha = 0.25)
plt.thetagrids(angles*180/np.pi,labels)
plt.figtext(0.25,0.95,'DOTA能力值雷达图',ha = 'center')
plt.grid(True)
plt.savefig('dota_radar.JPG')
plt.show()