matplotlib绘制雷达图的基本配置(万能模板案例)
目录
介绍应用场景案例一(成绩雷达图重叠)案例二(成绩雷达图左右图)极坐标介绍
雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。轴的相对位置和角度通常是无信息的。 雷达图也称为网络图,蜘蛛图,星图,蜘蛛网图,不规则多边形,极坐标图或Kiviat图。它相当于平行坐标图,轴径向排列。
应用场景
用于成绩的透视,比如查看你是否偏科,知晓你的兴趣偏向于哪一方面
案例一(成绩雷达图重叠)
# coding=utf-8 import numpy as np import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"]=["SimHei"] #显示中文 plt.rcParams["axes.unicode_minus"]=False #正常显示负号 results = [ {"大学英语": 87, "高等数学": 79, "体育": 95, "计算机基础": 92, "程序设计": 85}, {"大学英语": 80, "高等数学": 90, "体育": 91, "计算机基础": 85, "程序设计": 88} ] data_length = len(results[0]) # 将极坐标根据数据长度进行等分 angles = np.linspace(0, 2*np.pi, data_length, endpoint=False) labels = [key for key in results[0].keys()] score = [[v for v in result.values()] for result in results] # 使雷达图数据封闭 score_a = np.concatenate((score[0], [score[0][0]])) score_b = np.concatenate((score[1], [score[1][0]])) angles = np.concatenate((angles, [angles[0]])) labels = np.concatenate((labels, [labels[0]])) # 设置图形的大小 fig = plt.figure(figsize=(8, 6), dpi=100) # 新建一个子图 ax = plt.subplot(111, polar=True) # 绘制雷达图 ax.plot(angles, score_a, color="g") ax.plot(angles, score_b, color="b") # 设置雷达图中每一项的标签显示 ax.set_thetagrids(angles*180/np.pi, labels) # 设置雷达图的0度起始位置 ax.set_theta_zero_location("N") # E W S N SW SE NW NE # 设置雷达图的坐标刻度范围 ax.set_rlim(0, 100) # 设置雷达图的坐标值显示角度,相对于 y 起始角度的偏移量 ax.set_rlabel_position(270) ax.set_title("成绩对比") plt.legend(["张三", "李四"], loc="best") plt.show()
案例二(成绩雷达图左右图)
import numpy as np import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"]=["SimHei"] #显示中文 plt.rcParams["axes.unicode_minus"]=False #正常显示负号 results = [{"大学英语": 87, "高等数学": 79, "体育": 95, "计算机基础": 92, "程序设计": 85}, {"大学英语": 80, "高等数学": 90, "体育": 91, "计算机基础": 85, "程序设计": 88}] data_length = len(results[0]) angles = np.linspace(0, 2*np.pi, data_length, endpoint=False) labels = [key for key in results[0].keys()] score = [[v for v in result.values()] for result in results] score_a = np.concatenate((score[0], [score[0][0]])) # 将每个数组的第一个元素添加到末尾,首尾相连 score_b = np.concatenate((score[1], [score[1][0]])) # 将每个数组的第一个元素添加到末尾,首尾相连 angles = np.concatenate((angles, [angles[0]])) labels = np.concatenate((labels, [labels[0]])) fig = plt.figure(figsize=(10, 6), dpi=100) fig.suptitle("成绩对比") ax1 = plt.subplot(121, polar=True) ax2 = plt.subplot(122, polar=True) ax, data, name = [ax1, ax2], [score_a, score_b], ["张三", "李四"] for i in range(2): # 0:左图 张三,1:右图 李四 for j in np.arange(0, 100+20, 20): ax[i].plot(angles, 6*[j], "-.", lw=0.5, color="#123456") # 画五边形框,lw=linewidth for j in range(5): ax[i].plot([angles[j], angles[j]], [0, 100], ":", lw=0.7, color="green") # 画5条半径线,每个角度连接圆心0和顶点100 ax[i].plot(angles, data[i], color="b") # 在极坐标下画成绩折线图 ax[i].fill(angles, data[i],color="#B34543",alpha=0.1) ax[i].spines["polar"].set_visible(False) # 隐藏最外圈的圆 # 隐藏圆形网格线 ax[i].grid(False) for a, b in zip(angles, data[i]): ax[i].text(a, b+5, "%.00f" % b, ha="center", va="center", fontsize=12, color="b") ax[i].set_thetagrids(angles*180/np.pi, labels) ax[i].set_theta_zero_location("N") ax[i].set_rlim(0, 100) ax[i].set_rlabel_position(0) ax[i].set_title(name[i]) plt.show()
极坐标
import matplotlib.pyplot as plt import numpy as np plt.figure(figsize=(10,5)) # 设置画布 ax1 = plt.subplot(121, projection="polar") # 左图: projection="polar" 表示极坐标系 ax2 = plt.subplot(122) # 右图: 默认是直角坐标系 x = np.linspace(0,2*np.pi,9) # 0 - 2Π 平均划分成9个点 [0,1/4,1/2,3/4,1,5/4/,3/2,7/4,2] 0pi = 2pi y = np.random.random(9)*10 # 随机9个值 y[-1] = y[0] # 首位相连 ax1.plot(x,y,marker=".") # 画左图(ax1) 极坐标 (x表示角度,y表示半径) ax2.plot(x,y,marker=".") # 画右图(ax2)直角坐标 (x表示横轴,y表示纵轴) ax1.fill(x,y,alpha=0.3) ax2.fill(x,y,alpha=0.3) plt.show()
到此这篇关于matplotlib绘制雷达图的基本配置(万能模板案例)的文章就介绍到这了,更多相关matplotlib 雷达图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?