python绘制饼图的方法详解

用法

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, normalize=True, data=None)

参数介绍

参数  
x 楔形尺寸
explode 类似数组,默认值: 无,如果不是无,则是一个len(x)数组,用于指定偏移每个楔块的半径
labels 标签列表:默认值:无,为每个楔块提供标签的一系列字符串
colors 颜色,默认值:无,饼图循环使用的一系列颜色,如果没有,将使用当前活动周期中的颜色
autopct 默认值:无,如果不是无,则是一个字符串或函数,用于用数字值标记楔块.标签将放在楔子内,如果是格式字符串,则标签为fmt%pct,如果是函数,则调用
pctdistance 默认值为0.6,每个饼图切片的中心与生成的文本开头之间的比率
shadow 默认值为:False,楔块的阴影
labeldistance 默认值1.1,绘制饼图标签径向距离,如果设置为’无’,则不会绘制标签,会存储标签以供在图列()中使用
startangle 饼图角度起始角度
radius 默认值1,饼图的半径,数值越大,饼图越大
counterclock 设置饼图的方向,默认值为True,表示逆时针方向,False,为顺时针
wedgeprops 默认值:无,传递给楔形对象的参数,设置楔形的属性
textprops 设置文本对象的字典参数
center 浮点类型的列表,可选参数,图标中心位置
frame 是否选择轴框架,默认值为False,如果是True,则绘制带有表的轴框架
rotatelabels 默认值为False,布尔类型,如果为True,则将每个标签旋转到相应切片的角度
narmalize 布尔类型,默认值为True,如果为True,则始终通过规范化x来制作完整的饼图,使总和(x)=1。如果sum(x)<=1,False将生成部分饼图,并为sum(x)>1引发ValueError。
data 可选参数,如果给定,一下参数接受字符串s,该字符串被解释为数据[s]

案例

x

import numpy as np
import maplotlib.pyplot as plt
x = [1, 2, 3, 4]
plt.pie(x)
plt.show()

explode

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [1, 2, 3, 4]
plt.subplot(121)
plt.title('正常')
plt.pie(x)
plt.subplot(122)
plt.title('添加explode')
plt.pie(x,explode=[0.1,0.2,0.1,0.2])
plt.show()

labels,labeldistance

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [15, 30, 45, 10]
plt.subplot(131)
plt.title('正常')
plt.pie(x)
plt.subplot(132)
plt.title('添加labels')
plt.pie(x,labels=['x1','y1','x2','y2'])
# labeldistance默认为是1.1
plt.subplot(133)
plt.title('添加labels和labeldistance')
plt.pie(x,labels=['x1','y1','x2','y2'],labeldistance=1.2)
plt.show()

colors

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [1, 2, 3, 4]
plt.subplot(121)
plt.title('正常')
plt.pie(x)
# 颜色参数必须保持和x长度一样
plt.subplot(122)
colors = plt.get_cmap('Blues')(np.linspace(0.2,0.7,len(x)))
print(colors)
plt.title('添加colors')
plt.pie(x,colors=colors)
plt.show()

autopct

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [1, 2, 3, 4]
plt.subplot(131)
plt.title('正常')
plt.pie(x)
plt.subplot(132)
plt.title('添加autopct为1.1f')
plt.pie(x,autopct='%1.1f%%')
plt.subplot(133)
plt.title('添加autopct为10.1f')
plt.pie(x,autopct='%10.1f%%')
plt.show()

pctdistance

import numpy as np
import matplotlib.pyplot as plt

plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [1, 2, 3, 4]
plt.subplot(131)
plt.title('正常')
plt.pie(x)
plt.subplot(132)
plt.title('添加pctdistance默认值0.6')
plt.pie(x,autopct='%1.1f%%',pctdistance=0.6)
plt.subplot(133)
plt.title('添加pctdistance值1.5')
plt.pie(x,autopct='%1.1f%%',pctdistance=0.8)
plt.show()

pctdistance和autopct设置都可以偏移百分比,一个是同方向偏移,一个是距中心点位置

shadow

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [15, 30, 45, 10]
plt.subplot(121)
plt.title('正常')
plt.pie(x)
plt.subplot(122)
plt.title('添加shadow')
plt.pie(x,explode=(0,0,0.1,0),shadow=True)

plt.show()

startangle

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [15, 30, 45, 10]
plt.subplot(121)
plt.title('正常')
plt.pie(x,autopct='%1.1f%%')
# 起始角度设置
plt.subplot(122)
plt.title('设置startangle=90')
plt.pie(x,autopct='%1.1f%%',startangle=90)

plt.show()

radius

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [15, 30, 45, 10]
plt.subplot(121)
plt.title('正常')
plt.pie(x,autopct='%1.1f%%')
plt.subplot(122)
plt.title('设置radius=0.9')
plt.pie(x,autopct='%1.1f%%',radius=0.9)

plt.show()

counterclock

counterclock=False,设置饼图方向为逆方向

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [15, 30, 45, 10]
plt.subplot(121)
plt.title('正常')
plt.pie(x,autopct='%1.1f%%')
plt.subplot(122)
plt.title('设置counterclock=False')
plt.pie(x,autopct='%1.1f%%',counterclock=False)
plt.show()

wedgeprops

设置楔形的属性

wedgeprops传入字典类型,width设置,可以转变为环形图,edgecolor设置其环形边缘颜色

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [15, 30, 45, 10]
plt.subplot(121)
plt.title('正常')
plt.pie(x,autopct='%1.1f%%')
plt.subplot(122)
plt.title('设置wedgeprops楔形的属性')
plt.pie(x,autopct='%1.1f%%',wedgeprops=dict(width=0.3, edgecolor='blue'))

plt.show()

textprops,center,frame

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False
x = [15, 30, 45, 10]
plt.subplot(131)
plt.title('正常')
plt.pie(x,autopct='%1.1f%%')
plt.subplot(132)
plt.title('设置textprops,center=1.1,frame')
plt.pie(x,autopct='%1.1f%%',textprops={'size': 'larger'},center=(1,1),frame=True)

plt.subplot(133)
plt.title('设置textprops,center=2.2,frame')
plt.pie(x,autopct='%1.1f%%',textprops={'size': 'x-large'},center=(2,2),frame=True)

plt.show()

rotatelabels,normalize

这里不多介绍,可根据上述自己检验,很少被用到

举例

1.取饼图一部分楔形,添加colorbar

import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch
import numpy as np
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 5))
fig.subplots_adjust(wspace=0)
ratios = [.27, .56, .17]
labels = ['Approve', 'Disapprove', 'Undecided']
explode = [0.1, 0, 0]
angle = -180 * ratios[0]
ax1.pie(ratios, autopct='%1.1f%%', startangle=angle,
        labels=labels, explode=explode)
xpos = 0
bottom = 0
ratios = [.33, .54, .07, .06]
width = .2
colors = [[.1, .3, .5], [.1, .3, .3], [.1, .3, .7], [.1, .3, .9]]
for j in range(len(ratios)):
    height = ratios[j]
    ax2.bar(xpos, height, width, bottom=bottom, color=colors[j])
    ypos = bottom + ax2.patches[j].get_height() / 2
    bottom += height
    ax2.text(xpos, ypos, "%d%%" % (ax2.patches[j].get_height() * 100),
             ha='center')
ax2.set_title('Age of approvers')
ax2.legend(('50-65', 'Over 65', '35-49', 'Under 35'))
ax2.axis('off')
ax2.set_xlim(- 2.5 * width, 2.5 * width)

theta1, theta2 = ax1.patches[0].theta1, ax1.patches[0].theta2
center, r = ax1.patches[0].center, ax1.patches[0].r
bar_height = sum([item.get_height() for item in ax2.patches])
# draw top connecting line
x = r * np.cos(np.pi / 180 * theta2) + center[0]
y = r * np.sin(np.pi / 180 * theta2) + center[1]
con = ConnectionPatch(xyA=(-width / 2, bar_height), coordsA=ax2.transData,
                      xyB=(x, y), coordsB=ax1.transData)
con.set_color([0, 0, 0])
con.set_linewidth(4)
ax2.add_artist(con)
# draw bottom connecting line
x = r * np.cos(np.pi / 180 * theta1) + center[0]
y = r * np.sin(np.pi / 180 * theta1) + center[1]
con = ConnectionPatch(xyA=(-width / 2, 0), coordsA=ax2.transData,
                      xyB=(x, y), coordsB=ax1.transData)
con.set_color([0, 0, 0])
ax2.add_artist(con)
con.set_linewidth(4)
plt.show()

2.环形图

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
cmap = plt.cm.Set1
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap([1, 2, 5, 6, 9, 10])
ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
       wedgeprops=dict(width=size, edgecolor='w'))
ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,
       wedgeprops=dict(width=size, edgecolor='w'))
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
plt.show()

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 基于Python绘制美观动态圆环图、饼图

    前言 本文采用PyEchartsv1.x版本进行绘制地图. 注:PyEcharts分为 v0.5.x 和 v1.x 两个大版本,v0.5.x 和 v1.x 间不兼容,v0.5.x是基于Python2.7+.3.4+版本开发的,而v1.x是一个全新的版本,它是基于Python3.6+版本开发的,另外经PyEcharts开发团队决定,0.5.x 版本将不再进行维护. 绘制的饼图效果是这样的: 没有安装PyEcharts的,先安装PyEcharts: 安装好PyEcharts之后,就可以将需要使用的模

  • 用python 绘制茎叶图和复合饼图

    茎叶图 from itertools import groupby nums2=[225, 232,232,245,235,245,270,225,240,240,217,195,225,185,200, 220,200,210,271,240,220,230,215,252,225,220,206,185,227,236] for k, g in groupby(sorted(nums2), key=lambda x: int(x) // 10): print (k, list(g)) # p

  • 利用Python pyecharts绘制饼图

    目录 一.pyecharts绘制饼图语法简介 二.绘制普通饼图 三.绘制圆环图 四.绘制饼图-玫瑰图 一.pyecharts绘制饼图语法简介 饼图主要用于表现不同类目的数据在总和中的占比.每个的弧度不是数据量的占比 pie.add()方法的用法 add(name, attr, value, radius=None, center=None, rosetype=None, **kwargs) name->str 图例名称 attr->list 属性名称 value->list 属性所对应的

  • Python利用matplotlib实现饼图绘制

    目录 前言 1. 等高线图概述 什么是饼图? 饼图常用场景 绘制等饼图步骤 案例展示 2. 饼图属性 设置饼图的颜色 设置标签 设置突出部分 设置填入百分比数值 饼图旋转 设置阴影 3. 调整饼图的大小 4. 添加图例 5. 镂空饼图 总结 前言 众所周知,matplotlib.pyplot 提供绘制不同表格绘制方法,如使用plot()方法绘制折线,bar()绘制柱 在matplotlib.pyplot 中还有一种图表用于直观表示占比情况的饼图,在matplotlib官网上也列举出非常多关于饼图

  • 基于Python Pygame实现的画饼图游戏

    目录 导入包 配置基本参数 根据输入的数字改变扇形的个数 监听事件 这个游戏就是实现键盘上输入不同的数字,将圆分割成不同的几个部分,每部分用不同的颜色来实现. 导入包 导入随机包,pygame,系统包,time时间包用于时间暂停.math是用来确认弧度的. import random import pygame, sys, time import math from pygame.locals import * 配置基本参数 初始化pygame,设置窗口大小标题,设置圆心的x和y轴,圆的半径,线

  • Python+matplotlib实现饼图的绘制

    目录 一.整理数据 二.创建饼图 三.爆炸效果 四.阴影效果 五.为饼图加上百分比 六.让饼图旋转不同的角度 七.为饼图添加边缘线 八.为饼图数据分组 一.整理数据 关于cnboo1.xlsx,我放在我的码云里,需要的朋友自行下载:cnboo1.xlsx films=['穿过寒冬拥抱你','反贪风暴5:最终章','李茂扮太子','误杀2','以年为单位的恋爱','黑客帝国:矩阵重启','雄狮少年','魔法满屋','汪汪队立大功大电影','爱情神话'] regions=['中国','英国','澳大

  • python绘制饼图的方法详解

    用法 matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=F

  • Python sklearn分类决策树方法详解

    目录 决策树模型 决策树学习 使用Scikit-learn进行决策树分类 决策树模型   决策树(decision tree)是一种基本的分类与回归方法.   分类决策树模型是一种描述对实例进行分类的树形结构.决策树由结点(node)和有向边(directed edge)组成.结点有两种类型:内部结点(internal node)和叶结点(leaf node).内部结点表示一个特征或属性,叶结点表示一个类.   用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子

  • python生成式的send()方法(详解)

    随便在网上找了找,感觉都是讲半天讲不清楚,这里写一下. def generator(): while True: receive=yield 1 print('extra'+str(receive)) g=generator() print(next(g)) print(g.send(111)) print(next(g)) 输出: 1 extra111 1 extraNone 1 为什么会这样呢,点进send就能看到一句话 send:Resumes the generator and "sen

  • Python中格式化format()方法详解

     Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参数使用{NUM}进行表示,0, 表示第一个参数,1, 表示第二个参数, 以后顺次递加; 使用":", 指定代表元素需要的操作, 如":.3"小数点三位, ":8"占8个字符空间等; 还可以添加特定的字母, 如: 'b' - 二进制. 将数字以2为基

  • 对python函数签名的方法详解

    函数签名对象,表示调用函数的方式,即定义了函数的输入和输出. 在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名. 获取函数签名及参数 使用标准库的signature方法,获取函数签名对象:通过函数签名的parameters属性,获取函数参数. # 注意是小写的signature from inspect import signature def foo(value): return value # 获取函数签名 foo_sig = signature(foo)

  • 把JSON数据格式转换为Python的类对象方法详解(两种方法)

    JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下: {"Name": "Tom", "Sex": "Male", "BloodType": "A", "Hobbies": ["篮球", "足球"]} 我需要把这个转换为具

  • 对python 自定义协议的方法详解

    前面说到最近在写python的一些东西,然后和另外一位小伙伴定义了协议,然后昨天我有一部分东西没理解对,昨天上午我自己重写了一遍接收和发送的全部逻辑,昨天下午补了压力测试的脚本,自测没问题之后告知联调的小伙伴. 结果上午还是出了一点问题,然后我们两对代码,他写了一个python的实现.还好最后我这边没问题.(我也害怕是我这边出问题啊,所以我自己的代码都自己检查了好几遍) 简单放一下他的实现: import struct import ctypes class E(Exception): def

  • Python底层封装实现方法详解

    这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,python封装特性的实现纯属"投机取巧",之所以类对象无法直接调用私有方法和属性,是因为底层实现时,python偷偷改变了它们的名称. python在底层实现时,将它们的名称都偷偷改成了"_类名__属性(方法)名"的格式 class Person: def setname(self, name): if le

  • python集合删除多种方法详解

    这篇文章主要介绍了python集合删除多种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 删除指定的元素 A={'a','c','b','d','e'} print("原集合:",A) A.remove('a') # 不存在会报错 print("删除a后:",A) A.discard('b') # 不存在不会报错 print("删除b后:",A) A.pop() print("

  • Python实现括号匹配方法详解

    这篇文章主要介绍了python实现括号匹配方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用一个栈[python中可以用List]就可以解决,时间和空间复杂度都是O(n) # -*- coding: utf8 -*- # 符号表 SYMBOLS = {'}': '{', ']': '[', ')': '(', '>': '<'} SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.ke

随机推荐