matplotlib之pyplot模块——饼图(pie():圆环图(donut)、二层圆环图、三层圆环图(旭日图))「建议收藏」

matplotlib之pyplot模块——饼图(pie():圆环图(donut)、二层圆环图、三层圆环图(旭日图))「建议收藏」在matplotlib中pie()不单可以绘制饼图,还可以绘制圆环图(donut)。圆环图可以看成饼图的变种,matplotlib没有提供专门绘制圆环图的接口。在matplotlib之pyplot模块之饼图(pie():基础参数,返回值)中,我们提到了wedgeprops参数,通过wedgeprops参数传递饼块对象Wedge的width参数即可快速实现圆环图。下面通过三个案例简单说明圆环图、二层圆环图、三层圆环图的制作方法。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

matplotlibpie()不单可以绘制饼图,还可以绘制圆环图(donut)。圆环图可以看成饼图的变种,matplotlib没有提供专门绘制圆环图的接口。

在matplotlib之pyplot模块之饼图(pie():基础参数,返回值)中,我们提到了wedgeprops参数,通过wedgeprops参数传递饼块对象Wedgewidth参数即可快速实现圆环图。

下面通过三个案例简单说明圆环图、二层圆环图、三层圆环图(旭日图)的制作方法。

案例:简易圆环图

通过案例可知,圆环图与饼图的实现相比,仅多了参数wedgeprops={'width': 0.5}
在这里插入图片描述

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'

x = [1, 5, 4, 3]
labels = ['a', 'b', 'c', 'd']

plt.subplot(121)
plt.pie(x, labels=labels)
plt.title("饼图")

plt.subplot(122)
plt.pie(x, labels=labels, wedgeprops={ 
   'width': 0.5})
plt.title("圆环图")

plt.show()

案例:二层圆环图

多层圆环图一般用于展示分组数据。本案例需要展示的数据为二层嵌套列表[[60., 32.], [37., 40.], [29., 10.]],内层圆环展示分组合计,外层圆环展示每个项目。

案例提供了两种写法,一种使用numpy处理数据,一种使用Python内置方法,主要牵扯到嵌套列表的分组求和,嵌套列表展平操作。

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'

size = 0.4
data = [[60., 32.], [37., 40.], [29., 10.]]

plt.subplot(121)
# 使用numpy处理数据
vals = np.array(data)
# 内层圆环
plt.pie(vals.sum(axis=1), radius=1-size, autopct='%1.1f%%', pctdistance=0.6,
        wedgeprops=dict(width=size, edgecolor='w'))
# 外层圆环
plt.pie(vals.flatten(), radius=1, autopct='%1.1f%%', pctdistance=0.8,
        wedgeprops=dict(width=size, edgecolor='w'))
plt.title('双层圆环图')

plt.subplot(122)
# 使用Python内置方法处理数据
# 按分组求和作为内层圆环数据源
sums = [sum(i) for i in data]
# 展平数据作为外层圆环数据源
flatten = sum(data, [])
# 内层圆环
plt.pie(sums, radius=1-size, autopct='%1.1f%%', pctdistance=0.6,
        wedgeprops=dict(width=size, edgecolor='w'))
# 外层圆环
plt.pie(flatten, radius=1, autopct='%1.1f%%', pctdistance=0.8,
        wedgeprops=dict(width=size, edgecolor='w'))
plt.title('双层圆环图')

plt.show()

案例:三层圆环图(旭日图)

本案例需要展示的数据为三层嵌套列表[[[20, 30], 32], [37, [20, 15]], [29, 10, [10, 5]]],外层圆环展示每个项目,第二层展示二级分组合计,内层圆环展示一级分组合计。

案例的关键在于如何处理三层圆环的数据,由于数据不规则,使用numpy也比较麻烦,因此采用循环处理。

原始数据为:
[[[20, 30], 32], [37, [20, 15]], [29, 10, [10, 5]]]
目标数据为:
[20, 30, 32, 37, 20, 15, 29, 10, 10, 5]
[50, 32, 37, 35, 29, 10, 15]
[82, 72, 54]

在这里插入图片描述

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'SimHei'

size = 0.4
data = [[[20, 30], 32], [37, [20, 15]], [29, 10, [10, 5]]]
# data = [[[20, 30], [32]], [[37], [20, 15]], [[29, 10], [10, 5]]]
# 3个圆环图数据的临时变量
group1_data= []
group2_data = []
items_data = []
# 由于数据不规则,采用numpy也比较繁琐,因此采用循环处理数据
for group1 in data:
    temp_group2 = []
    temp_items = []
    for group2 in group1:
        if type(group2) is list:
            temp_group2 = sum(group2)
            items_data = items_data + group2
        else:
            temp_group2 = group2
            items_data.append(temp_group2)
        temp_items.append(temp_group2)
        group2_data.append(temp_group2)
    group1_data.append(sum(temp_items))
print(items_data, group2_data, group1_data)

# 外层圆环,数据为[20, 30, 32, 37, 20, 15, 29, 10, 10, 5]
plt.pie(items_data, radius=1.4, autopct='%1.1f%%', pctdistance=0.9,
        wedgeprops=dict(width=size, edgecolor='w'))
# 第二层圆环,数据为[50, 32, 37, 35, 29, 10, 15]
plt.pie(group2_data, radius=1.4-size, autopct='%1.1f%%', pctdistance=0.8,
        wedgeprops=dict(width=size, edgecolor='w'))
# 内层圆环,数据为[82, 72, 54]
plt.pie(group1_data, radius=1.4-2*size, autopct='%1.1f%%', pctdistance=0.6,
        wedgeprops=dict(width=size, edgecolor='w'))

plt.title('三层圆环图', loc='left')

plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189440.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Yarn application has already exited with state FINISHED

    Yarn application has already exited with state FINISHED

    2022年2月21日
    67
  • c语言入门教程–-12作用域

    c语言入门教程–-12作用域

    2021年3月12日
    239
  • 使用命令行编译、运行Java程序

    使用命令行编译、运行Java程序我们一般都是通过IDE(如Eclipse、IntellijIdea,MyEclipse、STS可以归到Eclipse里)来开发,调试java项目。在不借助IDE的情况下,如何编译、运行Java程序。使用javac命令,可以通过只敲击javac看到各种命令参数。必学参数-d-cp,这俩下面会讲到如果javac命令不能用,看一下环境变量是否没配对。我们从简单到复杂来看ja…

    2022年7月9日
    17
  • 微型计算机的档次主要取决于,微型计算机的性能主要取决于

    微型计算机的档次主要取决于,微型计算机的性能主要取决于匿名用户1级2013-07-10回答“微型计算机的性能主要取决于什么?”主要看三大件,CPU,主板,内存。1、CPU:其功能主要是解释计算机指令以及处理计算机软件中的数据,他的速度快慢可以代表计算机处理数据的能力的高低。2、内存:它是与CPU进行沟通的桥梁,计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。3、主板:主板在整个微机系统中扮演着举足轻重的角色。主板的类型…

    2022年6月28日
    40
  • deepinv2 添加打印机_【小教程】如何在deepin桌面操作系统中安装打印机「建议收藏」

    deepinv2 添加打印机_【小教程】如何在deepin桌面操作系统中安装打印机「建议收藏」原标题:【小教程】如何在deepin桌面操作系统中安装打印机简介:打印机(英语:Printer)或称作列印机、印表机,是一种电脑输出设备,可以将电脑内储存的数据按照文字或图形的方式永久的输出到纸张、透明胶片或其他平面媒介上。本文将介绍如何在深度操作系统上添加网络及本地打印机。准备工作:确保打印机已连接电源、网络并运行,如打印机需要安装驱动,需提前安装,无需安装打印驱动的,可直接配置,如下以佳能C…

    2022年10月21日
    0
  • leetcode-1074. 元素和为目标值的子矩阵数量(前缀和+hash)

    leetcode-1074. 元素和为目标值的子矩阵数量(前缀和+hash)给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= y <= y2 的所有单元 matrix[x][y] 的集合。如果 (x1, y1, x2, y2) 和 (x1’, y1’, x2’, y2’) 两个子矩阵中部分坐标不同(如:x1 != x1’),那么这两个子矩阵也不同。示例 1:输入:matrix = [[0,1,0],[1,1,1],

    2022年8月11日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号