前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python matplotlib绘制饼图

Python matplotlib绘制饼图

作者头像
Python碎片公众号
发布于 2021-02-26 08:04:32
发布于 2021-02-26 08:04:32
2.7K00
代码可运行
举报
运行总次数:0
代码可运行

继前面使用matplotlib绘制折线图、散点图、柱状图和直方图,本篇文章继续介绍使用matplotlib绘制饼图。

一、matplotlib绘制饼图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# coding=utf-8
import matplotlib.pyplot as plt


election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'],
        textprops={'fontsize': 24}, labeldistance=1.05)
plt.legend(fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.show()

运行结果:

pie(): matplotlib中绘制饼图的函数。第一个参数传入用于绘制饼图的数据列表,其他参数都是关键字参数。labels参数用于设置每个扇形的标签,说明每个扇形的数据归属。autopct参数用于设置饼图中的百分比,一般保留两位小数,传入"%1.2f%%"即可。colors参数用于设置每个扇形的颜色,与数据列表一一对应,传入一个与数据列表长度相等的列表。textprops参数用于设置标签和百分比的字体、大小等,传入一个字典。labeldistance参数用于设置标签与饼图的距离,默认值为1.1。

饼图将一个圆饼按照各分类的占比划分成多个扇形,整个圆饼代表数据的总量,每个扇形表示该分类占总体的比例大小,所有扇形相加的和等于100%。饼图适用于表示不同分类在总体中的占比情况,通过弧度大小来比较不同分类的占比大小,尤其在需要突出显示其中某一个部分的占比时。

上面的饼图绘制了2020年A国大选的票数占比情况,可以一目了然地看到候选人的得票占比情况。如果需要突出显示某位候选人的得票占比,可以对饼图进行分离展示。

二、matplotlib旋转饼图和突出显示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt


election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
explode = (0.1, 0, 0)
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'], textprops={'fontsize': 24},
        labeldistance=1.05, explode=explode, startangle=90, shadow=True)
plt.legend(loc='upper right', fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.axis('equal')
plt.show()

运行结果:

在绘制饼图的pie()函数中,explode参数用于设置每个扇形到圆心的距离,传入一个与数据列表长度相等的列表,默认每个扇形到圆心的距离都是0,将想要分离展示的扇形距离设置成一个适合的值,如0.1,即可将该部分突出展示。为了展示效果更好,可以使用startangle参数对饼图进行旋转(如将分离的扇形旋转到左侧),给startangle参数传入一个角度,将饼图逆时针旋转对应的角度,startangle参数表示的是饼图的起始角度,默认为正右方向,即传统的x轴正方形,此方向表示0度,设置起始角度后可以实现旋转的效果。对扇形进行分离展示后,将shadow参数设置为True,给饼图添加阴影,使饼图更立体,饼图切分的效果会更好。

在对饼图进行分离后,饼图的布局会发生变化,为了控制饼图占用的区域是一个正方形,且避免饼图变成椭圆形,使用axis('equal')函数,传入'equal'参数。

在上一张饼图的基础上,经过设置后,将获胜者Biden的得票率突出显示,可以更突出地展示获胜者的得票占比。

三、matplotlib绘制环形饼图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt


election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
explode = (0, 0, 0)
plt.pie(votes, labels=candidate, explode=explode, autopct="%1.2f%%", colors=['c', 'm', 'y'],
        textprops={'fontsize': 24}, labeldistance=1.05, pctdistance=0.85, startangle=90)
plt.pie([1], radius=0.7, colors='w')
plt.legend(loc='upper right', fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.axis('equal')
plt.show()

运行结果:

要绘制环形的饼图,在绘制出饼图后,再次调用pie()函数绘制一个更小的纯白饼图即可,先后顺序不能相反。

在绘制纯白的饼图时,传入只有一个数据的列表,一条数据会占满整个饼图,占比100%,颜色设置为colors='w'。radius参数默认为1,如果第一张饼图的radius参数是1,设置白色饼图的radius参数小于1,得到的白色饼图就会小于第一张饼图。此外不需要设置其他参数,白色饼图不需要显示百分比,不需要显示标签等。

绘制完成小的白色饼图,环形效果就实现了,还需要调整第一张饼图的百分比的显示位置。在pie()函数中,pctdistance参数用于设置百分比显示离圆心的距离,默认值是0.6,设置环形效果时,可以将pctdistance参数增大,使百分比显示在环形的中间。同时,因为环形饼图是通过遮挡实现的,阴影展示不完全,看起来比较别扭,所以不设置shadow参数,去掉阴影。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 碎片 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
matlab二值图像孔洞填充_matlab边缘检测之后怎么填充
subplot(1,2,1),imshow(img_bw), title(‘有空洞的图像’);
全栈程序员站长
2022/09/30
1.3K0
matlab二值图像孔洞填充_matlab边缘检测之后怎么填充
数学函数图像处理_matlab基本图像处理
[Y newmap] = imresize(X, map, scale)代码示例:
全栈程序员站长
2022/11/09
1.5K0
数学函数图像处理_matlab基本图像处理
Matlab常用图像处理命令108例(一)
[1] Rafael C. Gonzalez, Richard E. Woods, and Steven L. Eddins. 2003. Digital Image Processing Using MATLAB. Prentice-Hall, Inc., USA.
timerring
2023/03/13
4830
Matlab常用图像处理命令108例(一)
基于分水岭算法的图像分割-Matlab版本
分水岭算法是一种图像区域分割法,分割的过程中将图片转化为灰度图,然后将灰度值看作是海拔,然后向较低点注水,这种基于地形学的解释,我们着重考虑三种点:
用户9925864
2022/07/27
1.2K0
基于分水岭算法的图像分割-Matlab版本
matlab实现图像预处理的很多方法
RGB = imread('sy.jpg');                     % 读入图像 imshow(RGB),                                  % 显示原始图像 GRAY = rgb2gray(RGB);                          % 图像灰度转换 imshow(GRAY),                                  % 显示处理后的图像 threshold = graythresh(GRAY);                    % 阈值 BW = im2bw(GRAY, threshold);                     % 图像黑白转换 imshow(BW),                                      % 显示处理后的图像 BW = ~ BW;                                       % 图像反色 imshow(BW),                                      % 显示处理后的图像 1.图像反转 MATLAB程序实现如下: I=imread('xian.bmp'); J=double(I); J=-J+(256-1);                 %图像反转线性变换 H=uint8(J); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(H); 2.灰度线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像'); axis([50,250,50,200]); axis on;                  %显示坐标系 I1=rgb2gray(I); subplot(2,2,2),imshow(I1); title('灰度图像'); axis([50,250,50,200]); axis on;                  %显示坐标系 J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J); title('线性变换图像[0.1 0.5]'); axis([50,250,50,200]); grid on;                  %显示网格线 axis on;                  %显示坐标系 K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K); title('线性变换图像[0.3 0.7]'); axis([50,250,50,200]); grid on;                  %显示网格线 axis on;                  %显示坐标系 3.非线性变换 MATLAB程序实现如下: I=imread('xian.bmp'); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title('灰度图像'); axis([50,250,50,200]); grid on;                  %显示网格线 axis on;                  %显示坐标系 J=double(I1); J=40*(log(J+1)); H=uint8(J); subplot(1,2,2),imshow(H); title('对数变换图像'); axis([50,250,50,200]); grid on;                  %显示网格线 axis on;                  %显示坐标系 4.直方图均衡化 MATLAB程序实现如下: I=imread('xian.bmp'); I=rgb2gray(I); figure; subplot(2,2,1); imshow(I); subplot(2,2,2); imhist(I); I1=histeq(I); figure; subplot(2,2,1); imshow(I1); subplot(2,2,2); imhist(I1); 5.线性平滑滤波器 用MATLAB实现领域平均法抑制噪声程序: I=im
MachineLP
2022/05/09
8680
大神带你玩转matlab图像处理(二)
图像边缘是图像中重要特性(如像素灰度、纹理等)分布的不连续处,图像周围特性有阶跃变化或屋脊状变化的那些像素集合。图像的边缘部分集中了图像的大部分信息,一幅图像的边缘结构与特点往往是决定图像特质的重要部分。图像边缘的另一个定义是指其周围像素灰度变化不连续的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间,因此,边缘是图像分割及图像识别中的重要特征。
巴山学长
2020/02/17
1.1K0
大神带你玩转matlab图像处理(二)
Fill my holes_imfilter函数matlab
BW2 = imfill(BW) displays the binary image BW onthe screen and lets you define the region to fill by selecting pointsinteractively by using the mouse. To use this interactive syntax, BW mustbe a 2-D image. Press Backspace or Delete toremove the previously selected point. A shift-click, right-click,or double-click selects a final point and starts the fill operation.Pressing Return finishes the selection withoutadding a point.
全栈程序员站长
2022/09/30
1920
大神带你玩转matlab图像处理(三)
SE =strel('diamond',r)创建菱形形状的结构元素,其中r指定从结构元素原点到菱形中心点的距离。
巴山学长
2020/03/10
1.3K0
大神带你玩转matlab图像处理(三)
matlab 实现二值图像孔洞填充函数imfill()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/29
7160
matlab中Regionprops函数详解——度量图像区域属性
声明:原文链接https://blog.csdn.net/langb2014/article/details/49886787点击打开链接,仅学习使用,写的很不错。
全栈程序员站长
2022/11/17
2.2K0
matlab中Regionprops函数详解——度量图像区域属性
opencv边界填充_opencv边缘提取
因为c++算法还不会,决定先用matlab试试,找到一个imfill可以实现区域的填充
全栈程序员站长
2022/10/03
6170
图像处理用matlab还是python_python和matlab对比
由于需要frost滤波进行滤波,一通查找到了matlab版本,以前电脑上有matlab软件,但是一直没用到,现在东西好不容易找到了,就搜了下相关教程,整理一个博客。感觉matlab语言和python语言很多类似操作,所以敲起代码来有种“春风得意马蹄疾”的感觉,废话不多说,上代码。下面代码matlab入门没啥问题…
全栈程序员站长
2022/11/09
7400
imfilter函数matlab_matlab too many input argument
BWFILL Fill background regions in binary image.
全栈程序员站长
2022/09/30
3800
matlab做图像_matlab语言基础
也可以将一个图像写入当前目录下: l1=imread(‘E:\a_matlab_file\picture***.jpg’); img=rgb2gray(l1); imshow(img); imwrite(img,‘gray.jpg’);
全栈程序员站长
2022/11/09
1.3K0
matlab做图像_matlab语言基础
Matlab图像处理(五)——图像边缘提取
上一讲小白为小伙伴们带来了如何使用自编函数和自带函数对图像进行滤波,去除图像的噪声。这次小白为大家带来滤波的新用处——边缘提取。
小白学视觉
2019/10/24
6.4K0
matlab任意图形轮廓坐标提取【含源代码】
细心的伙伴不难发现上图的每个图形外面都画了一圈黑色虚线,不错,这些虚线就是根据图形轮廓提取的图像坐标绘制的。
巴山学长
2023/03/15
1.7K0
matlab任意图形轮廓坐标提取【含源代码】
matlab 马赫带效应,matlab图像处理基础实例
·边缘检测(edge)边缘检测时先要把其他格式图像转化为灰度图像>> f=imread( lbxx.bmp );>> a=rgb2gray(f);>> [g,t]=edge(a, canny );>> imshow(g)·剪贴(imcrop)、subplot 等imfinfo colormap subimageimadd imsubtract immultiply imdivideimresize imrotate(旋转)>> a=imread( onion.png );>> b=imcrop(a,[75 68 130 112]);% I2 = IMCROP(I,RECT)% RECT is a 4-element vector with the [XMIN YMIN WIDTH HEIGHT];% subplot(121)一行两列的显示,当前显示第一个图片>> subplot(121);imshow(a);>> subplot(122);imshow(b);·roipoly选择图像中的多边形区域>> a=imread( onion.png );>> c=[200 250 278 248 199 172];>> r=[21 21 75 121 121 75];>> b=roipoly(a,c,r);>> subplot(121);imshow(a);>> subplot(122);imshow(b);·roicolor按灰度值选择的区域>> a=imread( onion.png );>> i=rgb2gray(a);>> b=roicolor(i,128,255);>> subplot(121);imshow(a);>> subplot(122);imshow(b);·转化指定的多边形区域为二值掩膜poly2mask>> x=[63 186 54 190 63];>> y=[60 60 209 204 60];>> b=poly2mask(x,y,256,256);>> imshow(b);>> holdCurrent plot held>> plot(x,y, b , LineWidth ,2)·roifilt2区域滤波a=imread( onion.png );i=rgb2gray(a);c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];b=roipoly(i,c,r);h=fspecial( unsharp );j=roifilt2(h,i,b);subplot(121),imshow(i);subplot(122),imshow(j);·roifill区域填充>> a=imread( onion.png );>> i=rgb2gray(a);>> c=[200 250 278 248 199 172];>> r=[21 21 75 121 121 75];>> j=roifill(i,c,r);>> subplot(211);imshow(i);>> subplot(212);imshow(j);·FFT变换f=zeros(100,100);f(20:70,40:60)=1;imshow(f);F=fft2(f);F2=log(abs(F));imshow(F2),colorbar·补零操作和改变图像的显示象限f=zeros(100,100);f(20:70,40:60)=1;subplot(121);imshow(f);F=fft2(f,256,256);F2=fftshift(F);subplot(122);imshow(log(abs(F2))) ·离散余弦变换(dct)>> a=imread( onion.png );>> i=rgb2gray(a);>> j=dct2(i);>> subplot(131);imshow(log(abs(j))),colorbar>> j(abs(j)> k=idct2(j);>> subplot(132);imshow(i);>> subplot(133);imshow(k,[0,255]);info=imfinfo( trees.tif )%显示图像信息·edge提取图像的边缘canny prewitt sobelradon 函数用来计算指定方向上图像矩阵的投影>> a=imread( onion.png );>> i=rgb2gray(a);>> b=edge(i);>> theta=0:179;>> [r,xp]=radon(b,theta);>> figure,imagesc(theta,xp,r);colormap(hot);>> xlabel( \theta(degrees) );>> ylabel( x\prime );>> title( r_{\theta}(x\prime) );>> colorb
全栈程序员站长
2022/11/17
4110
简单车辆检测源码
简单车牌检测 main: clc; clear; close all; I=imread('1.png'); figure(1),imshow(I);title('原图'); I1=rgb2gray(I); figure(2),subplot(1,2,1),imshow(I1);title('灰度图'); figure(2),subplot(1,2,2),imhist(I1);title('灰度图直方图'); I2=edge(I1,'canny',[0.2,0.55]); figure(3),imshow
计算机视觉研究院
2018/04/17
1K0
分水岭算法及案例
Watershed Algorithm(分水岭算法),顾名思义,就是根据分水岭的构成来考虑图像的分割。现实中我们可以或者说可以想象有山有湖的景象,那么那一定是水绕 山,山围水的情形。当然在需要的时候,要人工构筑分水岭,以防集水盆之间的互相穿透。而区分高山(plateaus)与水的界线,以及湖与湖之间的间隔或 都是连通的关系,就是我们可爱的分水岭(watershed)。
全栈程序员站长
2022/07/02
8770
分水岭算法及案例
自动阈值法.m_自动阈值夺获功能
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
4220
相关推荐
matlab二值图像孔洞填充_matlab边缘检测之后怎么填充
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文