matplotlib 新雷达图

6 篇文章 0 订阅
2 篇文章 0 订阅

带标签两个图例的雷达图

# 新雷达图2019-6-11 11:01:29
import tempfile

import matplotlib.pyplot as plt
import numpy as np

# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False


def get_new_radar(title, x_tick_labels, data1, data2):
    # 使用ggplot的绘图风格
    # plt.style.use('ggplot')

    # 构造数据
    values = data1
    values2 = data2
    feature = x_tick_labels
    # feature = []
    # for i, j in zip(x_tick_labels, data1):
    #     summ = i + '\n'+str(j)
    #     feature.append(summ)

    N = len(values)
    # 设置雷达图的角度,用于平分切开一个圆面
    angles = np.linspace(0, 2 * np.pi, N, endpoint=False)
    # 为了使雷达图一圈封闭起来,需要下面的步骤
    values = np.concatenate((values, [values[0]]))
    values2 = np.concatenate((values2, [values2[0]]))
    angles = np.concatenate((angles, [angles[0]]))

    # 绘图
    fig = plt.figure()
    ax = fig.add_subplot(111, polar=True)
    # 绘制折线图
    ax.plot(angles, values, 'o-', linewidth=2, label='各校平均分')
    # 填充颜色
    ax.fill(angles, values, alpha=0.25)
    # 绘制第二条折线图    'o:'设置虚线
    ax.plot(angles, values2, 'o:', linewidth=2, label='联考平均分', )
    ax.fill(angles, values2, alpha=0.25)

    # 添加每个特征的标签
    ax.set_thetagrids(angles * 180 / np.pi, feature, size=6)
    # 设置雷达图的范围 可以控制间隔
    ax.set_ylim(min(data1) * 0.9, max(data1) * 1.01)
    # 添加标题 y=1.1 控制
    plt.title(title, y=1.2)

    ax.spines['polar'].set_visible(False)  # 将轴隐藏
    # 取消标签显示 labelsize = '0'  labelcolor  标签颜色
    ax.tick_params('y', labelcolor='#4472C4', labelsize='0')
    # 添加网格线
    ax.grid(True)
    # 添加文字
    for x, y in zip(angles[:-1],data1):
        plt.text(x, y, '%s' % y, size=7)

    # 设置图例
    plt.legend(loc='best', ncol=2, bbox_to_anchor=(0.8, 1.2), frameon=False)

    result = tempfile.mktemp('.jpg', prefix='bar_radar')
    plt.savefig(result, dpi=300, format="jpg", bbox_inches="tight")  # 不要限定图片格式
    plt.show()
    plt.close()
    return result


if __name__ == '__main__':
    labels = ['物理', '英语', '数学', '语文', '地理', '历史', '政治', '生物', '化学', '地理A', '地理B', '地理C', '法语']
    data1 = [0.88, 0.69, 0.98, 0.38, 0.66, 0.54, 0.57, 0.74, 0.82,0.54, 0.57, 0.74, 0.82]
    data2=[0.7] * len(data1)

    # labels = ['株洲市第八中学', '株洲市第四中学', '浏阳市第一中学', '醴陵市第一中学', '攸县第一中学', '株洲市第二中学']
    #     # data1 = [88, 92.5, 97.6, 98, 98.3, 100.1]
    #     # # 联考平均分
    #     # data2 = [96.8] * len(data1)

    # labels = ['株洲市第二中学', '浏阳市一中', '攸县第一中学', '醴陵市第一中学', '株洲市第四中学', '株洲市第八中学']
    # data1 = [696.8, 667.9, 666.5, 650.9, 543.1, 503.1]
    # # 联考平均分
    # data2 = [639.6] * len(data1)
    print(get_new_radar("雷达图", labels, data1, data2))

最终效果

                   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方天士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值