python数据可视化-matplotlib入门(5)-饼图和堆叠图

饼图常用于统计学模块,画饼图用到的方法为:pie( )

一、pie()函数用来绘制饼图

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=None, data=None)

pie()函数参数较多,需要我们调整的常见为以下几个
x: 每个扇形的占比的序列或数组
explode :如果不是None,则是一个len(x)长度的数组,指定每一块的突出程度;突出显示,设置每一块分割出来的间隙大小
labels:为每个扇形提供标签的字符串序列
colors:为每个扇形提供颜色的字符串序列
autopct :如果是一个格式字符串,标签将是fmt % pct。如果是一个函数,它将被调用。
shadow:阴影
startangle:从x轴逆时针旋转,饼的旋转角度 参数用法,可以去官网查询,并自己多去偿试。

2.一个简单的例子:计算每天休息、工作、娱乐等的百分比。

[En]

2. A simple example: count the percentage of daily rest, work, play, etc.

import matplotlib.pyplot as plt

slices = [7,2,9,3,3]
activities = ['sleeping','eating','working','studing','playing']
cols = ['r','m','y','c','b']

plt.pie(slices,
        labels=activities,
        colors=cols,  #自定义的颜色序列,对比slices,可多可少,少时自动补充,如没有,则默认不同颜色。
        startangle=90,
        shadow= True,
        explode=(0,0.1,0,0,0.2),#占比突出程度,
        autopct='%1.1f%%' #百分比的显示格式
        )

plt.title('Time statistics')
plt.show()

实际运行结果:

python数据可视化-matplotlib入门(5)-饼图和堆叠图

注意:startangle=90时的开始位置。整个饼图是从0度(圆心向右方向)逆时针分布的。

那继续用上篇创建的2个色子,来实现一个饼图。

思考:上述饼图代码中最能决定饼图形状的参数是slices = [7,2,9,3,3],在不考虑每个占比名称、美观等的情况下,先确定如何实现slices中的各数值。

比如,当投掷2粒色子(一个8个面,一个6个面)时,1000000次时,分别统计出现点1、2、3、4、5……14的总次数,保存到slices中即可。用数列中的统计方法 list.count()即可。

主要就是增加两行代码:

new_slices=[] # 新建一个数列

while side  max_result:
    side += 1
    new_bins.append(side) #这是之前做柱状图需要用到的
    new_slices.append( results.count(int(side))  ) #将保存两色子之和的数列,直接进行统计,results.count(int(side))就是在results的数列中统计出现side的次数。

结果还表明,7点、8点和9点之和出现最多,然后逐渐减少:

[En]

As a result, it also shows that the sum of points 7, 8, and 9 appears the most, and then decreases gradually:

python数据可视化-matplotlib入门(5)-饼图和堆叠图

简而言之,饼图根据分类的比例将一个圆划分为多个块,整个饼代表数据总量,每个块代表分类占总数的比例,所有块的和等于100%。

[En]

In short, the pie chart divides a circle into multiple blocks according to the proportion of the classification, the whole pie represents the total amount of data, each block represents the proportion of the classification to the total, and the sum of all blocks is equal to 100%.

三、 堆叠图

使用matplotlib中的stackplot()函数可以快速绘制堆积图,stackplot()函数的语法格式如下所示
stackplot(x, y, labels=(), baseling=’zero’, data=None, args, *kwargs)

此函数的常见参数具有以下含义

[En]

The common parameters of this function have the following meanings

x:表示x轴的数据,可以是一维数组。
y:表示y轴的数据,可以是二维数组或一维数组序列。
labels:表示每组折线及填充区域的标签。
baseline:表示计算基线的方法,包括’zero’、’sym’、’wiggle’和’weighted_wiggle’。
其中,’zero’表示恒定零基线,即简单的堆积图;
‘sym’表示对称于零基线;
‘wiggle’表示最小化平方斜率的总和;
‘weighted_wiggle’表示执行相同的操作,但权重用于说明每层的大小。

使用相同的示例来查看堆栈图的效果,代码如下:

[En]

Take a look at the effect of the stack diagram with the same example, the code is as follows:

import matplotlib.pyplot as plt

days =    [1,2,3,4,5,6,7]

sleeping =[7,8,6,8,7,8,6]
eating  = [2,3,3,3,2,2,2]
working = [7,7,7,8,10,3,4]
studing = [6,4,4,4,3,8,11]
playing = [2,2,4,1,2,3,1]

labellist = ['sleeping','eating','working','studing','playing']
colorlist = ['c','y','b','r','g']

plt.stackplot(days, sleeping,eating,working,studing,playing,labels=labellist,colors=colorlist)
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=(0.07, 0.05))
plt.title('Stack Plots')
plt.show()

运行结果如下:

python数据可视化-matplotlib入门(5)-饼图和堆叠图

plt.legend()是显示左下角的标签。而语句plt.stackplot()函数中的sleeping,eating,working,studing,playing是一维数组序列,即stackplot(x,y……)中的y值,是一系列一维数据。

显然,通过饼图和堆叠图的比较,它们之间的区别是:饼图只能显示一段时间内花在项目上的时间与总时间的比例,而堆积图可以显示该时间段内每天花费的时间。

[En]

Obviously, through the comparison of the pie chart and the stack chart, the difference between them: the pie chart can only show the ratio of time spent on a project to the total time over a period of time, while the stack chart can show the time spent on each day during that period of time.

既然sleeping,eating,working,studing,playing形成的一维数组,感觉参数比较多,那直接形成一个二维数组如何?做如下修改:

days =    [1,2,3,4,5,6,7]
"""
sleeping =[7,8,6,8,7,8,6]
eating  = [2,3,3,3,2,2,2]
working = [7,7,7,8,10,3,4]
studing = [6,4,4,4,3,8,11]
playing = [2,2,4,1,2,3,1]
"""
times =[                   # 二维数组,以数列作为元素的数列。
        [7,8,6,8,7,8,6],   #上述sleeping数列
        [2,3,3,3,2,2,2],
        [7,7,7,8,10,3,4],
        [6,4,4,4,3,8,11],
        [2,2,4,1,2,3,1]
        ]plt.stackplot(days, times,labels=labellist,colors=colorlist)

运行结果如图:

python数据可视化-matplotlib入门(5)-饼图和堆叠图

效果与原始的一维数组相同。

[En]

The effect is the same as the original one-dimensional array.

但是,手工编程时输入数据太麻烦,所以第二部分介绍了直接读取文件数据并对其进行处理。

[En]

However, it is too troublesome to input data when programming in this way by hand, so the second part introduces reading file data directly and processing it.

Original: https://www.cnblogs.com/codingchen/p/16199537.html
Author: PursuitingPeak
Title: python数据可视化-matplotlib入门(5)-饼图和堆叠图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499716/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球