Matplotlib饼图、环图绘制代码

不只是饼状图,Matplotlb的官网上Example页面下有各种图表的例子(Matplotlib-Examples),因此,如果想要绘制图表,建议先到官网上看一看,挑选合适的图表,如果不懂的话,再找其他资料学习。
最近需要绘制饼状图(其实是环状图),其实简单绘制的话是很简单的,但是对参数进行一些调整的话会使图表变得很好看,这里重点记录一下pie()函数的一些重要参数,同时记录一下这份代码作为Demo,方便之后改动使用,这份代码是根据官方代码改动的:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt


# 指定本地字体 使用 fontproperties=myfont 调用 没有这个属性的无法使用
# myfont = matplotlib.font_manager.FontProperties(fname=r"times.ttf")

# 创建、返回 Figure 对象和 Axes 子图对象
fig, ax = plt.subplots(figsize=(12, 6))

recipe_data = [375, 75, 250, 300, 200]
recipe_labels = ['dataa', 'datab', 'datac', 'datad', 'datae']


# 凸显的块偏离的程度 例如 0.5就是显示在离中心点 1.5r的位置
explode = [0, 0.3, 0, 0, 0]

# 用来规定输出格式的函数
def func(pct, allvals):
    absolute = int(pct/100.*np.sum(allvals))
    return "{:.1f}%\n({:d})".format(pct, absolute)

# 颜色列表
colors=['#06799f', '#4c8e9e','#3aaacf','#33cccc', '#91cdcb']
# colors = ['#7bcdca','#499b98','#467472', '#89a1d5', '#9dafd5']


'''
函数调用格式:
    matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, 
    pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, 
    radius=None, counterclock=True, wedgeprops=None, textprops=None, 
    center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)
其中:
x:数据
labels: 每个块的标记列表 在legend和作为图表外标记使用
colors: string list颜色参数列表
explode: float list 每个块偏移的程度 如果是0.5 就表示偏离中心 1.5r 用来凸显某一块
autopct: string format 标注 或者是使用函数方式(一般传入一个lambda函数用来匹配数据和不同的标注)
pctdistance: float 块上标记文字距离中心的程度(0,1)
textprops:dict 用来设置文本对象的一些属性例如:textprobs = dict(color='w') 或者 textprobs = {color:'w'} 表示标注文字的颜色是白色
wedgeprops:dict  设置wedge对象的一些参数 例如 wedgeprops={'linewidth':3, 'width':0.5, 'edgecolor':'w'} 
                                                           图表线条宽     设置是否圈的环的比例(0,1), 不同块的边界颜色
counterclock:bool 指定指针方向,顺时针或者逆时针。
startangle: float 从x轴开始逆时针开始偏移的角度
shadow: bool 是否添加阴影
center:float list 图标中心位置。                                                         
labeldistance:float 被画饼标记的直径。
frame:bool 表的轴框架。
rotatelabels:bool 旋转每个label到指定的角度。                                                
radius: float 半径

返回值:
patches:list matplotlib.patches.Wedge对象列表。
text:list 饼(圈)内部的文字
autotexts:list 饼(圈)外部的文字
'''
wedges, texts, autotexts = ax.pie(x=recipe_data,
                                  labels=recipe_labels,
                                  # autopct='%1.1f%%',   autopct后面跟的两种形式  这种格式就是 像12.3%的百分比一位小数
                                  autopct=lambda pct: func(pct ,recipe_data),
                                  explode=explode,
                                  colors=colors,
                                  pctdistance=0.7,
                                  textprops=dict(color="w"),  # 设置白色会看不到圆外部的文字(背景是白色)
                                  # 设置环的比例占一半
                                  wedgeprops = {'width': 0.5, 'linewidth': 1, 'edgecolor':'w'}
                                  )

# 设置图例中的一些属性
ax.legend(wedges, recipe_labels,
          title="legends",
          title_fontsize=15,
          fontsize=17,
          loc="center left",
          bbox_to_anchor=(1, 0, 0.5, 1))

plt.setp(autotexts, size=12, weight="bold")    # 文字的大小之类
ax.set_title("Pie Chart", fontdict={'fontsize':15, 'fontweight':15})
# 如果直接对figure对象设置的话,会有一个参数fontproperties,后面跟的就是自己定义使用的字体
# plt.title("Matplotlib bakery: A pie", fontproperties=myfont, fontsize=15)

# plt.savefig('test01')   保存
plt.show()

效果:
在这里插入图片描述

实际上,绘制好看的图表的一个重要方面就是图表的配色,这个配色我是根据很多论文常用的颜色设置的,网络上会有很多配色的网站,可以简单学习一下配色的方法,例如这个网站:Color Scheme Designer,会帮助你选择更合理的颜色搭配来让你的图表更好看。

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