
极线图经常在游戏介绍不同职业的属性能力时有用到,matplotlib也可以通过polar()函数进行绘制,但相关参数介绍比较小,而源码中好像也没有详细列举出来,所以导致不知如何去控制细小的样式。
图示:

知识点:
1、创建极线图
plt.polar(r,
current,
color="r",
label="当前值",
marker="*", # 数据点样式
mfc="r", # 数据点的颜色(中间填充部分,要放大才看得到)
ls="--", # 线条样式
)
其中r与current是必须的,分别是角度和值
2、r是角度值,不是按360度,而是要一圈为2pi计算,所以要在将一圈分为6块,那r应为:r = np.linspace(0,np.pi*2,6)
图中一共只有5个点,为什么要封6块呢,因为最后一个点也是起点,就是为了将图封闭起来。
3、current是其中定义的一个列表变量,里面装有6个值,第6个值与第1个值相同,就是为了将图形封闭起来。
4、放置图例
plt.legend(loc="upper right",
ncol=1, # 使图例按xx排列
title="图例说明",
shadow=True,
bbox_to_anchor=(1.3,1), # 以左下角为原点放置图例,loc就没用了
fancybox=False # True:圆角 False:直角
)
这里最重要的是bbox_to+_anchor,光使用loc无法将图例放到想要的位置,因为loc只有几个固定值,详见以前的记录。
使用bbox_to_anchor,以左下角作为(0,0),以右上角作为(1,1)来进行布局。
代码:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 定义数据
label=["内容质量","信用分","活跃度","专业性","用户喜爱"]
current = [582,519,771,700,917,582]
target = [500,560,700,700,500,500]
r = np.linspace(0,np.pi*2,6)
plt.polar(r,
current,
color="r",
label="当前值",
marker="*", # 数据点样式
mfc="r", # 数据点的颜色(中间填充部分,要放大才看得到)
ls="--", # 线条样式
)
plt.polar(r,
target,
color="g",
label="Lv5目标值"
)
plt.legend(loc="upper right",
ncol=1, # 使图例按xx排列
title="图例说明",
shadow=True,
bbox_to_anchor=(1.3,1), # 以左下角为原点放置图例,loc就没用了
fancybox=False # True:圆角 False:直角
)
plt.show()