import matplotlib.pyplot as plt
import pandas as pd
from math import pi
df = pd.DataFrame({
'group': ['A', 'B', 'C', 'D'],
'var1': [38, 15, 12, 7],
'var2': [34, 16, 19, 3],
'var3': [8, 29, 13, 1.4],
'var4': [17, 31, 23, 24],
'var5': [18, 35, 22, 4]
})
def make_radar(row, title, color):
categories = list(df)[1:] # ['var1', 'var2', 'var3', 'var4', 'var5']
N = len(categories) # 5
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]#angles[:1]:[0.0]
#print(angles)#[0.0, 1.2566370614359172, 2.5132741228718345, 3.7699111843077517, 5.026548245743669, 0.0]
ax = plt.subplot(2, 2, row + 1, polar=True)#ploat=True,绘制极点图
ax.set_theta_offset(pi / 2)#ax.set_theta_offset():该方法设置角度偏离
ax.set_theta_direction(-1)#ax.set_theta_direction():该方法设置极坐标的正方向,1:逆时针,-1:顺时针,默认逆时针
plt.xticks(angles[:-1], categories, color='grey', size=8)#改变X坐标轴 刻度名称,颜色,字体大小
ax.set_rlabel_position(0)#设置极径标签显示位置,0就是没有偏移
plt.yticks([10, 20, 30], ["10", "20", "30"], color="grey", size=7)
plt.ylim(0, 40)#取值范围
values = df.loc[row].drop('group').values.flatten().tolist()#flatten()返回一位数组
values += values[:1]
ax.plot(angles, values, color=color, linewidth=2, linestyle='solid')#做折线图
ax.fill(angles, values, color=color, alpha=0.4)#做面积图
plt.title(title, size=11, color=color, y=1.1)# 添加标题
my_dpi = 96
plt.figure(figsize=(1000 / my_dpi, 1000 / my_dpi), dpi=my_dpi)
my_palette = plt.cm.get_cmap('Set2', len(df.index))#plt.cm.get_cmap():该方法设置画图颜色。len(df.index)=4
for row in range(0, len(df.index)):
make_radar(row=row, title='group' + df['group'][row], color=my_palette(row))
plt.savefig('雷达图.png')
plt.show()
Python 画雷达图
最新推荐文章于 2025-04-17 11:05:35 发布