matplotlib 新雷達圖

帶標籤兩個圖例的雷達圖

# 新雷達圖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))

最終效果

                   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章