本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
以下文章来源于Python小例子,作者 无尘
转载地址
<code><span class="hljs-attribute">https:<span class="hljs-comment">//www.gaodaima.<a href="https://www.gaodaima.com/tag/com" title="查看更多关于com的文章" target="_blank">com</a>/fei347795790?t=1</span></span></code>
www#gaodaima.com来源gaodai#ma#com搞@@代~&码*网搞代码
现有以下表格,我需要画成第二张图中的雷达图(类似fifa足球、王者荣耀里面的那种球员能力图)
雷达图函数用到以下包:
<span><a href="https://www.gaodaima.com/tag/import" title="查看更多关于import的文章" target="_blank">import</a></span><span> math </span><span>import</span><span> numpy as np </span><span>import</span><span> matplotlib.pyplot as plt </span><span>import</span> matplotlib.colors as mcolors
导入中文相关字体
<span>#</span><span> 导入中文</span> <span>import</span><span> matplotlib.font_manager as font_manager font_dirs </span>= [<span>"</span><span>./font</span><span>"</span><span>] font_files </span>= font_manager.findSystemFonts(fontpaths=<span>font_dirs) font_list </span>=<span> font_manager.createFontList(font_files) font_manager.fontManager.ttflist.extend(font_list) plt.rcParams[</span><span>"</span><span>font.family</span><span>"</span>] = <span>"</span><span>SimHei</span><span>"</span> <span>#</span><span> 启用主题</span> plt.style.use(<span>"</span><span>ggplot</span><span>"</span>)
获取极径范围
<span>#</span><span> 获取极径范围</span> <span>def</span><span> get_range(data_list): max </span>= min =<span> 0 </span><span>for</span> _, data <span>in</span><span> data_list.items(): </span><span>for</span> v <span>in</span><span> data: </span><span>if</span> v <<span> min: min </span>=<span> v </span><span>if</span> v ><span> max: max </span>=<span> v </span><span>return</span> [min, max]
生成能力分布图
<span>#</span><span> 生成能力分布图</span> <span>def</span> generate_ability_map(abilities, data_list, rows=3<span>): min, max </span>=<span> get_range(data_list) </span><span>#</span><span> 根据能力项等分圆</span> angles = np.linspace(0, 2 * np.pi, len(abilities), endpoint=<span>False) angles </span>=<span> np.append(angles, angles[0]) </span><span>#</span><span> 生成n个子图</span> fg, axes = plt.subplots(math.ceil(len(data_list) / rows), rows, subplot_kw=dict(polar=True),figsize=(9,9<span>)) </span><span>#</span><span> 调整子图间距</span> plt.subplots_adjust(wspace =0.6, hspace =0.6<span>) </span><span>#</span><span> 打散为一维数组</span> axes =<span> axes.ravel() </span><span>#</span><span> 获取所有支持的颜色</span> colors =<span> list(mcolors.TABLEAU_COLORS) </span><span>#</span><span> 循环绘制</span> i =<span> 0 </span><span>for</span> name, data <span>in</span><span> data_list.items(): data </span>=<span> np.append(np.array(data), data[0]) ax </span>=<span> axes[i] </span><span>#</span><span> 绘制线条</span> ax.plot(angles, data, color=<span>colors[i]) </span><span>#</span><span> 填充颜色</span> ax.fill(angles, data, alpha=0.7, color=<span>colors[i]) </span><span>#</span><span> 设置角度</span> <span> ax.set_xticks(angles) </span><span>#</span><span> 设置坐标轴名称</span> <span> ax.set_xticklabels(abilities) </span><span>#</span><span> 设置名称</span> ax.set_title(name, size=10, color=<span>"</span><span>black</span><span>"</span>, position=(0.5, 0.4<span>)) </span><span>#</span><span> 设置极径最小值</span> <span> ax.set_rmin(min) </span><span>#</span><span> 设置极径最大值(最大值加0.1,要不线条最外圈线显示不完全)</span> ax.set_rmax(max + 0.1<span>) i </span>= i + 1<span> plt.show()</span>
调用:
<span>#</span><span>数据</span> abilities = [<span>"</span><span>灵活性</span><span>"</span>, <span>"</span><span>功能性</span><span>"</span>, <span>"</span><span>平稳性</span><span>"</span>, <span>"</span><span>安全性</span><span>"</span>, <span>"</span><span>耐用性</span><span>"</span>, <span>"</span><span>经济性</span><span>"</span><span>] super_heros </span>=<span> { </span><span>"</span><span>固定点降落</span><span>"</span>: [2,1,5,5,4,3<span>], </span><span>"</span><span>任意点降落</span><span>"</span>: [5,5,2,3,3,4<span>], </span><span>"</span><span>局部最优点降落</span><span>"</span>: [4,5,4,4,3,4<span>], } </span><span>#</span><span>画图</span> generate_ability_map(abilities, super_heros)
程序运行后,得到文中开始的图: