可视化日记——极坐标绘制雷达图

本文介绍了如何在Python中使用matplotlib库创建极坐标雷达图,包括数据集准备(如k-means聚类后的标准化),划分角度,指定半径,以及如何绘制和个性化设置雷达图。
摘要由CSDN通过智能技术生成

目录

一、创建极坐标

二、数据集准备

三、划分角度 

四、指定半径

五、绘制


一、创建极坐标

        Python中没有直接画雷达图的函数,若要绘制需要先创建画布和极坐标轴域,再设定角度与半径的参数(极坐标中角度与半径确定一个点的位置)

fig = plt.figure(figsize=[10, 6])
ax = plt.subplot(111, polar=True)

二、数据集准备

        前期已由k-means聚类算法得到对应数据集 visualization_data,对其进行标准化数处理:

# 标准化
v_scaler= StandardScaler()
v_scaled= v_scaler.fit_transform(visualization_data.iloc[:5,:])

v_scaled=pd.DataFrame(v_scaled,index=visualization_data.index[:5],columns=visualization_data.columns)
v_scaled

        标准化后待绘图的数据 v_scaled 如下:

三、划分角度 

        现在有五个属性,需要把 2π 划分为5分

# 划分角度
angles = np.linspace(0, 2 * np.pi, len(v_scaled), endpoint=False) # 极坐标的角度值根据数据属性数量进行等分
label_θ = np.concatenate((angles,[angles[0]]),axis=0)
print(label_θ)
print(angles)

# 有无concatenate的区别
[0.         1.25663706 2.51327412 3.76991118 5.02654825 0.        ]
[0.         1.25663706 2.51327412 3.76991118 5.02654825]

(没有 concatenate 连接在绘制时会变成这样) 

https://www.cnblogs.com/kallan/p/6738577.html

        [angles[0]]无方括号会报错,因为进行的是数组间的连接,不能数组与整数之间这样连接

四、指定半径

# 值——即半径长度,以类别2为例
propvalue = v_scaled.iloc[:,1]
label_l=np.concatenate((propvalue,[propvalue[0]]))
print(propvalue)
print(label_l)

[Recency      1.819582
Frequency   -0.864999
Monetary     0.263034
客单价         -0.353453
客单件         -0.864165
Name: 2, dtype: float64]

[ 1.81958224 -0.86499907  0.26303444 -0.35345253 -0.86416507  1.81958224]

五、绘制

        绘制雷达图,在极坐标下仍然使用plot(),参数是极坐标参数就可以了

### 以下代码需要在同一框内实现 ###
fig = plt.figure(figsize=(30,30)) # 创建画布
mpl.rcParams["font.sans-serif"] = ["SimHei"] # 中文
mpl.rcParams['axes.unicode_minus']=False # 负号
plt.subplots_adjust(hspace=0.4)  # 设置一下子图之间的垂直距离
color=['green','springgreen','springgreen','lime','lime','g','g','lime','g'] # 指定颜色

for i in range(0,len(v_scaled.columns)):        # 0开始循环绘制,数据集有9列
    ax1 = fig.add_subplot(3,3,i+1,polar=True)   # 定位到第i+1个axes
    
    propvalue = v_scaled.iloc[:,i]                        # 第 i 列  
    label_l=np.concatenate((propvalue,[propvalue[0]]))    # 连接
    ax1.plot(label_θ, label_l,color='g',alpha=0.5 )       # plot的作用是画图并连线
    ax1.fill(label_θ, label_l, color=color[i],alpha=1)    # 填充,设置颜色和深浅
    
    # 其他元素设置
    # 设置雷达图中每一项的标签显示
    ax1.set_thetagrids(angles*180/np.pi, v_labels,fontsize=25)    

    # 设置雷达图的0度起始位置
    ax1.set_theta_zero_location('E')

    # 设置雷达图的坐标刻度范围
    ax1.set_rlim(-2.5, 2.5)

    # 设置雷达图的坐标值显示角度,相对于起始角度的偏移量

    # 设置标题
    ax1.set_title('类别'+str(v_scaled.columns[i])+':'+str(labeled_data_rate.T.loc['数量',v_scaled.columns[i]])+'人',fontsize=35)

(部分图片) 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带带琪宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值