Python中用Matplotlib库怎样画饼图和环形图
Admin 2022-09-06 群英技术资讯 637 次浏览
饼图 常常用来显示 整体中各部分所占的比例,在python-matplotlib库中通过plt.pie()方法来实现。
其主要参数如下:
x --------每一块饼图的比例组成的序列。可以是一个列表。如果其中元素的值加起来大于一,则会通过
归一化处理后的结果。
explode -------- 指每一块饼距离圆心的距离。默认为0。如果大于0,则饼即会分裂出来,即“分裂饼形图”效果。
labels -------- 标签,即每一块饼图外侧显示的说明文字
autopct -------- 设置饼图百分比的格式。即字符串的格式,可以使用格式化字符串表达式或者format()函数的表达式。 不设定这个参数则不会显示百分比的字符串。
pctdistance --------指百分比的位置刻度,默认为0.6。
shadow --------布尔类型,饼图是否带阴影(立体感)。默认False不带。
labeldistance --------标记的绘制的位置,占半径长度的比例。默认为1.1,如果大于1则显示在饼的内侧。
startangle --------起始绘制角度,默认从x轴正方向逆时针画起。例如,设置为90则从y轴正方向画起。
radius -------- 饼图的半径,默认为1。
counterclock -------- 指针方向。布尔类型。默认为True,表示逆时针。如果为False则表示顺时针。
wedgeprops -------- wedge对象的属性(wedge翻译过来即三角木,楔子,即表示饼图中的每一块儿),可选参数,字典类型,默认为None。这个字典将会传递给wedge对象。如wedgeprops={‘linewidth’:2}表示wedge的线条宽度为2。
textprops -------- text标签文本的属性。也是一个字典类型,可选。默认为None。
center -------- 饼图的原点。
frame -------- 是否显示轴框架,布尔类型,默认不显示,False。如果为True则会显示轴框架。可以与grid()配合使用。通常不使用该参数,因为轴框架会干扰图像效果。
rotatelabels -------- 可选,旋转标签到指定角度。(“指定”的含义是,以该位置连接圆心的半径为水平基准。)
绘制一张简单的饼图,图像上的百分数显示出一位小数。标签为[‘A类’, ‘B类’, ‘C类’, ‘D类’]。
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] ='#cc00ff' x = [10, 20, 35, 25] plt.pie(x, autopct='%1.1f%%', labels=['A类', 'B类', 'C类', 'D类']) plt.title("产品数量占比") plt.show()
图像效果呈现如下:
设置背景颜色为’#00E5EE’,
百分数显示一位小数,
四块的颜色依次为[‘red’, ‘green’, ‘purple’, ‘yellow’]
B类 在饼图中 向外分裂0.2个单位 explode=[0, 0.2, 0, 0],
从y轴正方向开始绘图 startangle=90,
饼图半径设为1.1 radius=1.1,
标签文本字体的大小为20,颜色为 ‘#8B1A1A’ textprops={‘fontsize’: 20, ‘color’: ‘#8B1A1A’}
显示阴影效果,
标签在半径0.6单位处 pctdistance=0.6,
每个标签都选择一定的角度 rotatelabels=True
代码如下:
import matplotlib.pyplot as plt fig = plt.figure(1, facecolor='#00E5EE', figsize=(10, 8)) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] = '#cc00ff' x = [10, 20, 35, 25] plt.pie(x, labels=['A类', 'B类', 'C类', 'D类'], autopct='%1.1f%%', colors=['red', 'green', 'purple', 'yellow'], explode=[0, 0.2, 0, 0], startangle=90, radius=1.1, textprops={'fontsize': 20, 'color': '#8B1A1A'}, shadow=True, pctdistance=0.6, rotatelabels=True ) # 设置标题文本、y坐标(即竖直方向上的位置),字体大小、颜色 plt.title("产品数量占比", y=1.05, fontsize=25, color='#cc00ff') plt.show()
绘制环形图仍然使用plt.pie()方法,
只需要设置其中的wedgeprops参数的属性。
代码示例如下
在上例代码的基础上,取消分裂,
添加 wedgeprops={‘width’: 0.4, ‘edgecolor’: ‘k’}。
然后把百分数的位置pctdistance设置为0.8。
import matplotlib.pyplot as plt fig = plt.figure(1, facecolor='#00E5EE', figsize=(10, 8)) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] = '#cc00ff' x = [10, 20, 35, 25] plt.pie(x, labels=['A类', 'B类', 'C类', 'D类'], autopct='%1.1f%%', colors=['red', 'green', 'purple', 'yellow'], startangle=90, radius=1.1, textprops={'fontsize': 20, 'color': '#8B1A1A'}, shadow=True, pctdistance=0.8, rotatelabels=True, wedgeprops={'width': 0.4, 'edgecolor': 'k'} ) plt.title("产品数量占比", y=1.05, fontsize=25, color='#cc00ff') plt.show()
内嵌环形图,以内嵌一次为例。即两个圆环,需要调用两次plt.pie()方法。
通过wedgeprops参数设置不同的环形边界,通过radius设置不同的半径。
全局字体为SimHei(黑体)。标题部分的局部字体使用“华文琥珀”(将系统的字体文件STHUPO.TTF复制到当前内容介绍下)。
import matplotlib.pyplot as plt from matplotlib import font_manager fig = plt.figure(1, facecolor='#ffffcc', figsize=(6, 6)) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] = '#cc00ff' x1 = [10, 20, 35, 25] x2 = [8, 32, 20, 40] plt.pie(x1, autopct='%1.1f%%', colors=['red', 'green', 'blue', 'yellow'], startangle=90, radius=1, textprops={'fontsize': 16, 'color': 'purple'}, pctdistance=0.85, rotatelabels=True, wedgeprops={'linewidth': 2, 'width': 0.3, 'edgecolor': 'k'} ) plt.pie(x2, autopct='%1.1f%%', colors=['red', 'green', 'blue', 'yellow'], startangle=90, radius=0.7, textprops={'fontsize': 16, 'color': 'purple'}, pctdistance=0.6, rotatelabels=True, wedgeprops={'linewidth': 2, 'width': 0.4, 'edgecolor': 'k'} ) plt.title("产品数量占比", fontsize=25, color='purple', fontproperties=font_manager.FontProperties(fname='STHUPO.TTF')) plt.legend(['A类', 'B类', 'C类', 'D类'], bbox_to_anchor=(0.9, 0.2)) plt.show()
程序执行效果如下:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家详细介绍了python实现双人版坦克大战游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
文本给大家分享的是关于Python中property属性的使用。下文有property属性使用的示例以及要注意的事项的介绍,具有一定的参加借鉴价值,需要的朋友可以参考学习。
这篇文章主要介绍了python倒序for循环实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
本文讲述如何使用 tkinter 的布局管理 (被称作 layout managers 或 geometry managers). tkinter 有三种布局管理方式:pack,grid,place。注意这三种布局管理在同一个 master window 里一定不可以混用! 布局管理有以下功能:
JSON用来存储和交换文本信息,比xml更小/更快/更易解析,下面这篇文章主要给大家介绍了关于python向json中追加数据的两种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008