• python画饼图(两种偶)


    Pie(芒果派还是草莓派)

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    from pylab import mpl
    import seaborn as sns
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.figure(facecolor='snow')
    sns.set_style("darkgrid", {"font.sans-serif": ['simhei', 'Droid Sans Fallback']})
    font_size = 11
    font_family = "SimHei"
    font_weight = "bold"
    plt.rc("font", size=font_size, family=font_family, weight=font_weight)
    
    def myPie():
        data = [1249,1462,1728,1771,978]
        labels = ['2015','2016','2017','2018','2019']
        explode = [0,0,0.3,0,0]
        colors = ['red','hotpink','purple','orange','yellow']
        plt.axes(aspect="equal") #保证正圆
        plt.xlim(0,8)
        plt.ylim(0,8)
    
        plt.gca().spines['right'].set_color('white')
        plt.gca().spines['top'].set_color('white')
        plt.gca().spines['left'].set_color('white')
        plt.gca().spines['bottom'].set_color('white')
    
        # 绘制饼图
        plt.pie(x=data,  # 绘制数据
                labels=labels,  # 添加编程语言标签
                explode=explode,  # 突出显示Python
                colors=colors,  # 设置自定义填充色
                autopct='%.2f%%',  # 设置百分比的格式,保留2位小数
                pctdistance=0.8,  # 设置百分比标签和圆心的距离
                labeldistance=1.37,  # 设置标签和圆心的距离
                startangle=160,  # 设置饼图的初始角度
                center=(4, 4),  # 设置饼图的圆心(相当于X轴和Y轴的范围)
                radius=2.6,  # 设置饼图的半径(相当于X轴和Y轴的范围)
                counterclock=False,  # 是否为逆时针方向,False表示顺时针方向
                wedgeprops={'linewidth': 1, 'edgecolor': 'pink'},  # 设置饼图内外边界的属性值
                # textprops={'fontsize': 19, 'color': 'black', 'fontproperties': my_font},  # 设置文本标签的属性值
                textprops={'fontsize': 10, 'color': 'black'},  # 设置文本标签的属性值
                frame=1)  # 是否显示饼图的圆圈,1为显示
    
        # 不显示X轴、Y轴的刻度值
        plt.xticks(())
        plt.yticks(())
        # 添加图形标题
        # plt.title('专利分布', fontproperties=my_font)
        # plt.title('distribution of Food')
        # 显示图形
        plt.show()
        fig.savefig('res/pic/4.png')
    
    def axPie():
        fig, ax = plt.subplots(figsize=(8, 4), subplot_kw=dict(aspect="equal"))
        recipe  = ['2015y 1249',
                   '2016y 1462',
                   '2017y 1728',
                   '2018y 1771',
                   '2019y 978']
        data = [1249,1462,1728,1771,978]
    
        """
        参数wedgeprops以字典形式传递,设置饼图边界的相关属性,例如圆环宽度0.5
        饼状图默认从x轴正向沿逆时针绘图,参数startangle可指定新的角(例如负40度)度起画
        """
        wedges, texts = ax.pie(data, wedgeprops=dict(width=0.5), startangle=-40)
    
        # 创建字典bbox_props,设置文本框的边框样式(boxstyle:方框,pad设置方框尺寸)、前景色(fc)为白色(w)、边框颜色(ec)为黑色(k)、线粗(lw)为0.72
        bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72)
    
        """
        参数集kw以字典形式传递,包含一系列用于绘图标注的指定参数
        xycoords用于指定点xy的坐标环境,xycoords='data'表示沿用被注释的对象所采用的坐标系(默认设置)
        textcoords用于指定点xytext的坐标环境,textcoords='data'表示沿用被注释的对象所采用的坐标系(默认设置)
        参数arrowprops以字典形式传递,用于控制箭头的诸多属性,如箭头类型(arrowstyle)、箭头连接时的弯曲程度(connectionstyle)
        """
        kw = dict(xycoords='data', textcoords='data', arrowprops=dict(arrowstyle="-"),
                  bbox=bbox_props, zorder=0, va="center")
    
        for i, p in enumerate(wedges):  # 遍历每一个扇形
    
            ang = (p.theta2 - p.theta1) / 2. + p.theta1  # 锁定扇形夹角的中间位置,对应的度数为ang
    
            # np.deg2rad(x)将度数x转为弧度(x*pi)/180
            y = np.sin(np.deg2rad(ang))  # np.sin()求正弦
            x = np.cos(np.deg2rad(ang))  # np.cos()求余弦
    
            """
            np.sign()符号函数:大于0返回1.0,小于0返回-1.0,等于0返回0.0
            参数horizontalalignment用于设置垂直对齐方式,可选参数:left、right、center
            当余弦值x大于0(即标签在饼图右侧时,按框左侧对齐)时,horizontalalignment="left"
            当余弦值x小于0(即标签在饼图左侧时,按框右侧对齐)时,horizontalalignment="right" 
            """
            horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]
    
            connectionstyle = "angle,angleA=0,angleB={}".format(ang)  # 参数connectionstyle用于控制箭头连接时的弯曲程度
            kw["arrowprops"].update({"connectionstyle": connectionstyle})  # 将connectionstyle更新至参数集kw的参数arrowprops中
    
            """
            用一个箭头/横线指向要注释的地方,再写上一段话的行为,叫做annotate
            ax.annotate()用于对已绘制的图形做标注
            recipe[i]是第i个注释文本
            size设置字体大小
            xy=(x1, y1)表示在给定的xycoords中,被注释对象的坐标点
            xytext=(x2, y2)表示在给定的textcoords中,注释文本的坐标点
            """
            ax.annotate(recipe[i], size=15, xy=(x, y), xytext=(1.35 * np.sign(x), 1.4 * y),
                        horizontalalignment=horizontalalignment, **kw)
    
        ax.set_title("")
        plt.show()
        fig.savefig('res/pic/3.png')
    
    
    
    if __name__ == "__main__":
        # drawLineStyle()
        # axPie()
        myPie()

    myPie:

    axPie:

  • 相关阅读:
    .NET下的加密解密大全(1): 哈希加密
    orm fluentdata使用相关文章
    xml处理相关文章收藏
    Salty Fish(区间和)
    Fennec VS. Snuke
    Splitting Pile
    ST表(离线RMQ)
    Exponentiation(高精度大数)
    高斯消元(模板)
    Online Judge(字符串-格式)
  • 原文地址:https://www.cnblogs.com/z-712/p/14185969.html
Copyright © 2020-2023  润新知