一、利用matplotlib绘制饼图

1、导入模块:

import matplotlib.pyplot as pltimport pandas as pdimport matplotlib

2、设置数据:

data = pd.Series([95,261,105,30,9],index =["五星","四星","三星","二星","一星"])data

输出结果:





3、饼图主代码:

# 设置图片大小和分辨率fig=plt.figure(figsize=(5,5), dpi=100)# 设置饼图标签labels = data.index# 设置饼图颜色colors = ['#9ACD32','#EEAD0E','#EE7942','#483D8B','#EEB422']# 偏移位置or偏离圆心的距离(这里使“四星”数据偏移)explode = (0, 0.1, 0, 0, 0) # 绘制饼图:autopct显示百分比,这里保留一位小数;shadow控制是否显示阴影data.plot(kind="pie", explode=explode, labels=labels, autopct='%0.1f%%', colors=colors, shadow=True)# 解决中文字体乱码的问题matplotlib.rcParams['font.sans-serif']=['simsun'] #使饼图长宽相等,确保饼图被画成圆形。plt.axis('equal') # 保存图片plt.savefig("./饼图.jpg")

输出结果:



4、嵌套饼图主代码:

fig=plt.figure(figsize=(5,5),dpi=100)#数据集,x1, x2分别对应内部、外部百分比例x1=[7,22,14,5,14,6,32]x2=[43,25,32]#设置饼状图各个区块的颜色inner_color=['#ffce2b','#00c5d2', '#ff812c']outer_color=['#9ACD32','#836FFF','#1E90FF']labels = ['标签1','标签2','标签3']# 绘制内部饼图:autopct控制显示百分比,radius控制半径,pctdistance控制数据标签到圆心位置的距离plt.pie(x1, autopct='%0.1f%%', radius=0.7, pctdistance=0.7,colors=inner_color,wedgeprops=dict(linewidth=3,width=0.4,edgecolor='w'))# 绘制外部饼图:wedgeprops以字典形式传参,linewidth控制间隔线条的宽度,width控制饼图宽度(不超过半径),edgecolor控制间隔线条的颜色(此处为白色)plt.pie(x2, autopct='%0.1f%%', radius=1, pctdistance=0.8, colors=outer_color, wedgeprops=dict(linewidth=3,width=0.4,edgecolor='w'), labels=labels)# 图例文字legend_text=['子标签1','子标签2','子标签3']# 设置图例标题、位置,frameon控制是否显示图例边框,bbox_to_anchor控制图例显示在饼图的外面plt.legend(legend_text,, loc='upper right', frameon=False, bbox_to_anchor=(0.75, 0, 0.4, 1))    #使饼图长宽相等,确保饼图被画成圆形。plt.axis('equal')   # 保存图片plt.savefig("./嵌套饼图.png")

输出结果:



二、利用Pyecharts绘制饼图

1、简洁版:

# 导入相应模块from pyecharts import options as optsfrom pyecharts.charts import Piefrom snapshot_selenium import snapshot as driverfrom pyecharts.render import make_snapshot# 设置数据num = [95, 261, 105, 30, 9]rank = ["五星", "四星", "三星", "二星", "一星"]# 绘制饼图pie = Pie(init_opts=opts.InitOpts())# 添加数据pie.add("", [list(z) for z in zip(rank, num)])# 设置颜色pie.set_colors(['#9ACD32', '#EEAD0E', '#EE7942', '#483D8B', '#EEB422'])# 设置标题及标题位置pie.set_global_opts(title_opts=opts.TitleOpts(, pos_left="10%", pos_right="90%"))# 控制图例显示为垂直格式,也可在set_global_opts里面添加:legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"# 设置标签显示格式pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))

输出结果:



2、进化版:

import pyecharts.options as optsfrom pyecharts.charts import Pie# 设置内层数据inner_x_data = ["标签1", "标签2", "标签3"]inner_y_data = [335, 679, 1548]inner_data_pair = [list(z) for z in zip(inner_x_data, inner_y_data)]# 设置外层数据outer_x_data = ["子标签1", "子标签2", "子标签3", "子标签4", "子标签5", "子标签6", "子标签7", "子标签8"]outer_y_data = [335, 310, 234, 135, 1048, 251, 147, 102]outer_data_pair = [list(z) for z in zip(outer_x_data, outer_y_data)]# 绘制饼图pie = Pie(init_opts=opts.InitOpts(, ))# 设置颜色pie.set_colors(['#FF00FF','#EEAD0E','#EE7942','#483D8B','#EEB422','#C0FF3E','#FFC1C1','#FF6A6A','#98FB98','#87CEFA','#8470FF'])pie.add(series_name="内层饼图",        # 添加内层数据        data_pair=inner_data_pair,        # 内层饼图半径        radius=[0, "30%"],                 # 控制标签显示在饼图内部        label_opts=opts.LabelOpts(position="inner"))            pie.add(series_name="外层饼图",        # 外层饼图半径        radius=["40%", "55%"],         # 添加外层数据        data_pair=outer_data_pair,        label_opts=opts.LabelOpts(            # 控制标签显示在饼图外部            position="outside",             # 设置标签显示格式            formatter="{a|{a}}{abg|}{hr|} {b|{b}: }{c}  {per|{d}%}  ",            # 设置背景颜色,此处为白色            background_color="#FFFFFF",            # 设置边框颜色,此处为蓝色            border_color="#0000FF",            # 设置边框宽度            border_width=1,            border_radius=4,            rich={                # 控制series_name文字的颜色(此处为红色)、行间距、对其方式                "a": {"color": "#FF0000", "lineHeight": 22, "align": "center"},                 # 控制series_name文字部分的填充色(此处为黄色)、宽度、对其方式、填充高度、绘图边角的弧度(这里左上角和右上角的弧度为4)                "abg": {                    "backgroundColor": "#FFFF00",                      "width": "100%",                    "align": "right",                    "height": 22,                    "borderRadius": [4, 4, 0, 0],                },                # 控制边框分割线的颜色(此处为红色)、绘制范围、边框宽度、边框高度                "hr": {                    "borderColor": "#ff1a00",                      "width": "100%",                    "borderWidth": 0.5,                    "height": 0,                },                # 控制子标签文字的大小和行间距                "b": {"fontSize": 16, "lineHeight": 33},                # 控制百分比的颜色(此处为绿色)、背景填充色(此处为深蓝色)、填充范围、边角弧度                "per": {                    "color": "#00FF00",                        "backgroundColor": "#191970",                    "padding": [2, 4],                    "borderRadius": 2,                },            },        ),    )# 设置标签显示在左侧,且垂直分布        pie.set_global_opts(legend_opts=opts.LegendOpts(pos_left="20%", orient="vertical"))# 设置标签显示格式pie.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} 
{b}: {c} ({d}%)"))    # 保存图片make_snapshot(driver, pie.render(),"Pyecharts嵌套饼图.png")# 或者保存为HTML格式pie.render("Pyecharts嵌套饼图.html")

输出结果: