不只是饼状图,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,会帮助你选择更合理的颜色搭配来让你的图表更好看。