matplotlib做极坐标图 (matplotlib数据拟合)

matplotlib学习记录:极线图polar,

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

图示:

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()