此次我们制作的是关于护肤品下的畅销品类雷达图,数据如下:
数据预览:
一、代码展示
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
adress="D:/pandas练习文件/雷达图.xlsx"
df=pd.read_excel(adress)
print(df)
# 数据包含彩妆和护肤品两类,获取护肤品数据
护肤品=df.loc[df.大类=="护肤品",:]
#获取数据后充值索引,方便下面的闭环操作选中数据第一个
护肤品.reset_index(drop=True,inplace=True)
#将x,y轴数据和角度获取到
小类=护肤品["小类"]
销量=护肤品["销量"]
角度=np.linspace(0,2*np.pi,len(小类),endpoint=False)#注意角度获取方式
#进行闭环操作,运用np.concatenate
#必须要注意双层括号(())和后面选中第一个值外面套一个中括号[销量[]]
小类=np.concatenate((小类,[小类[0]]))
销量=np.concatenate((销量,[销量[0]]))
角度=np.concatenate((角度,[角度[0]]))
#创建图,注意这里一定要写jpg=,否则写plt的话下面的set_thetagrids无法运行
jpg=plt.subplot(111,polar=True)
jpg.plot(角度,销量,'bo-')
jpg.fill(角度,销量,'b',alpha=0.3)
#将雷达图中的角度值替换成想要的数据文字
jpg.set_thetagrids(角度*180/np.pi,小类)
plt.title('护肤品畅销品类')
plt.show()
二、具体步骤分解
1.导入相关包并读取表格数据
import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] adress="D:/pandas练习文件/雷达图.xlsx" df=pd.read_excel(adress)
2.运用loc获取所需的护肤品数据
护肤品=df.loc[df.大类=="护肤品",:]
3.重置数据索引
护肤品.reset_index(drop=True,inplace=True)
如果不重置索引的话不方便闭环操作中选取第一个数据这一操作
4. 获取雷达图所需数据
小类=护肤品["小类"] 销量=护肤品["销量"]
5.设置角度 (运用np.linspace)
角度=np.linspace(0,2*np.pi,len(小类),endpoint=False)
注:np.pi是指圆周率Π,也就是180°,2*np.Π也就是360°
6. 进行闭环操作
#必须要注意双层括号(())和后面选中第一个值外面套一个中括号[销量[]] 小类=np.concatenate((小类,[小类[0]])) 销量=np.concatenate((销量,[销量[0]])) 角度=np.concatenate((角度,[角度[0]]))
7.创建雷达图
(1)雷达图初创
jpg=plt.subplot(111,polar=True)
注意:这里一定要写jpg=,如果直接写plt.subplot(111,polar=True)的话下面的set_thetagrids无法运行
(2) 填入数据
jpg.plot(角度,销量,'bo-')
“bo-” 解释:b是设置点线的颜色,是blue的缩写,o是点的样式,-是指用线连接各个点
(3)填充
jpg.fill(角度,销量,'b',alpha=0.3)
(4) 将雷达图中的角度值替换成想要的数据文字
jpg.set_thetagrids(角度*180/np.pi,小类)
(5) 标题
plt.title('护肤品畅销品类')
(6)
plt.show()