python 用 matplotlib 饼图参数详解 plt.pie()

1、加载库

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

 

2、逐步添加参数,查看绘图效果

def ax_set_title(s):
    ax.set_title(label=f'No.{i+1}\n'+s,    # 标题的文本内容
                 loc='right',    # 标题的位置
                 family='Arial',    # 标题文本的字体类型
                 size=13,    # 字体大小
            )

# 配置字体,显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei']  
# 配置坐标轴刻度值模式,显示负号
mpl.rcParams['axes.unicode_minus'] = False

# 定义数据
cnt_pct = [0.35, 0.15, 0.20, 0.30]
cs = ['red', 'orange', 'yellow', 'green']
labs = [f'{e.upper()} 难度水平' for e in 'abcd']

explode = (0.1, 0.1, 0.1, 0.1)

# 初始化图表区
fig, axes = plt.subplots(nrows=4,
                         ncols=5,
                         figsize=(16, 12),
                         facecolor='cornsilk'
                        )
axes = axes.ravel()

# 选择子区 1
i = 0
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
      )
## 设置标题
ax_set_title(s='x')


# 选择子区 2
i = 1
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
      )
## 设置标题
ax_set_title(s='explode')


# 选择子区 3
i = 2
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
      )
## 设置标题
ax_set_title(s='labels')


# 选择子区 4
i = 3
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
      )
## 设置标题
ax_set_title(s='colors')



## 设置标题
ax_set_title(s='labels')


# 选择子区 5
i = 4
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
      )
## 设置标题
ax_set_title(s='autopct')


# 选择子区 6
i = 5
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.8,    # 锲形块数据标注的径向距离
      )
## 设置标题
ax_set_title(s='pctdistance')


# 选择子区 7
i = 6
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.8,    # 锲形块数据标注的径向距离
       shadow=True,    
      )
## 设置标题
ax_set_title(s='shadow')


# 选择子区 8
i = 7
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.8,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=1.02,    # 锲形块标签的径向距离
      )
## 设置标题
ax_set_title(s='labeldistance')


# 选择子区 9
i = 8
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
      )
## 设置标题
ax_set_title(s='startangle')


# 选择子区 10
i = 9
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
      )
## 设置标题
ax_set_title(s='radius')


# 选择子区 11
i = 10
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
       counterclock=False,    # 是否让饼图按逆时针顺序呈现
      )
## 设置标题
ax_set_title(s='counterclock')


# 选择子区 12
i = 11
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
       counterclock=False,    # 是否让饼图按逆时针顺序呈现
       # 锲形块边界属性字典
       wedgeprops={'edgecolor': 'silver',}
      )
## 设置标题
ax_set_title(s='edgecolor')


# 选择子区 13
i = 12
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
       counterclock=False,    # 是否让饼图按逆时针顺序呈现
       # 锲形块边界属性字典
       wedgeprops={'edgecolor': 'silver',
                   'linewidth': 3,
                  }
      )
## 设置标题
ax_set_title(s='linewidth')


# 选择子区 14
i = 13
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
       counterclock=False,    # 是否让饼图按逆时针顺序呈现
       # 锲形块边界属性字典
       wedgeprops={'edgecolor': 'silver',
                   'linewidth': 3,
                   'linestyle': ':'
                  }
      )
## 设置标题
ax_set_title(s='linestyle')


# 选择子区 15
i = 14
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
       counterclock=False,    # 是否让饼图按逆时针顺序呈现
       # 锲形块边界属性字典
       wedgeprops={'edgecolor': 'silver',
                   'linewidth': 3,
                   'linestyle': ':'
                  },
       # 锲形块标签文本和数据标注文本的字体属性
       textprops=dict(color='blue')  #  字体颜色
      )
## 设置标题
ax_set_title(s='fontcolor')


# 选择子区 16
i = 15
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
       counterclock=False,    # 是否让饼图按逆时针顺序呈现
       # 锲形块边界属性字典
       wedgeprops={'edgecolor': 'silver',
                   'linewidth': 1,
                   'linestyle': '-'
                  },
       # 锲形块标签文本和数据标注文本的字体属性
       textprops=dict(color='k',  #  字体颜色
                      fontsize=14,
                     )
      )
## 设置标题
ax_set_title(s='fontsize')


# 选择子区 17
i = 16
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
       counterclock=False,    # 是否让饼图按逆时针顺序呈现
       # 锲形块边界属性字典
       wedgeprops={'edgecolor': 'silver',
                   'linewidth': 1,
                   'linestyle': '-'
                  },
       # 锲形块标签文本和数据标注文本的字体属性
       textprops=dict(color='k',  #  字体颜色
                      fontsize=12,
                     ),
       rotatelabels=True    # 是否旋转锲形块的标签与其角度对应
      )
## 设置标题
ax_set_title(s='rotatelabels')

# 选择子区 18
i = 17
ax = axes[i]
## 设置子区背景色
ax.set_facecolor('cornsilk')

# 选择子区 19
i = 18
ax = axes[i]
## 设置子区背景色
ax.set_facecolor('cornsilk')

# 选择子区 20
i = 19
ax = axes[i]

## 绘制饼图
ax.pie(x=cnt_pct,    # 产生锲形块的数据
       explode=explode,    # 锲形块分离距离序列 
       labels=labs,    # 锲形块标签列表
       colors=cs,    # 锲形块的颜色列表
       autopct='%3.1f%%',    # 锲形块的数据标注格式 (88.8%)
       pctdistance=0.5,    # 锲形块数据标注的径向距离
       shadow=True,
       labeldistance=0.9,    # 锲形块标签的径向距离
       startangle=90,    # 饼图的初始摆放角度
       radius=1.2,    # 饼图半径
       counterclock=False,    # 是否让饼图按逆时针顺序呈现
       # 锲形块边界属性字典
       wedgeprops={'edgecolor': 'silver',
                   'linewidth': 1,
                   'linestyle': '-'
                  },
       # 锲形块标签文本和数据标注文本的字体属性
       textprops=dict(color='k',  #  字体颜色
                      fontsize=12,
                     ),
       frame=True,    # 是否绘制框架
       rotatelabels=False    # 是否旋转锲形块的标签与其角度对应
      )
## 设置标题
ax_set_title(s='frame')

## 设置子区背景色
ax.set_facecolor('cornsilk')

# 设置整个子区的布局
fig.subplots_adjust(left=0,
                    bottom=0,
                    right=0.9,
                    top=1,
                    wspace=0.2,    # 子区间空白区域的宽度的归一化值
                    hspace=0.3);    # 子区间空白区域的高度的归一化值
plt.savefig('pie.jpg')

图形:

posted @ 2020-05-08 22:12  赏尔  阅读(8209)  评论(0编辑  收藏  举报