用python画环形图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Carlsummer/article/details/86588716
import pandas as pd
import matplotlib.pyplot as plt
import random


# 获取渐变色的list
def gradual(number):
    colors = []
    h = 0.00001
    gradual2 = random.uniform(0, 1)
    r = gradual2
    if gradual2 >= 0.5:
        g = h
        b = gradual2
    else:
        g = gradual2
        b = h
    colors.append((r, g, b, 1))
    for i in range(number - 1):
        # 大于0.5 则为绿色渐变,小于则为蓝色渐变
        if gradual2 >= 0.5:
            g = 1 if ((1 - h) / number) > 1 else (g + (1 - h) / number)
        else:
            b = 1 if ((1 - h) / number) > 1 else (b + (1 - h) / number)
        colors.append((r, g, b, 1))
    return colors


# 获取绿色的个数
def listGreen(number):
    colors = []
    for i in range(number):
        colors.append('#6CAD4F')
    return colors


# 画环形图
def circularGraph(outerData, innerData, labels):
    data = pd.DataFrame([outerData, innerData], columns=labels)
    # 设置字体这样才可以显示中文
    plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
    plt.rcParams['axes.unicode_minus'] = False
    plt.figure(figsize=(8, 5))
    colors = gradual(len(labels))
    # 数据内环
    plt.pie(data.iloc[1, :], radius=0.65, wedgeprops=dict(width=0.3, edgecolor='w'), colors=colors)
    # 数据外环
    plt.pie(data.iloc[0, :], radius=1, wedgeprops=dict(width=0.3, edgecolor='w'), colors=listGreen(len(labels)))
    # 获取ax label
    ax = plt.subplot(1, 1, 1)
    # loc是位置,bbox_to_anchor是位置坐标,borderaxespad将图例放外面  frameon=False去掉图例边框
    ax.legend(labels, loc=4, bbox_to_anchor=(1.3, 0.4), borderaxespad=0., frameon=False)
    plt.show()


circularGraph([30, 30, 20, 40], [30, 30, 20, 40],
              ['甲硫杆菌', '霍尔德曼氏菌属', 'Faecali菌属', '瘤胃菌属'])

猜你喜欢

转载自blog.csdn.net/Carlsummer/article/details/86588716