Python科学工具——matplotlib可视化(柱状图、直方图、饼图)

一、绘制柱形(状)图

  • 柱状图(bar chart),是一种以长方形的长度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或两个以上的价值(不同时间或者不同条件)。
    或者说,指不同事物之间或同一事物在不同时间下的优劣等的对照,能够比较清晰地反映数据的差异,一般情况下用来反映分类项目之间的比较。
    pyplot中绘制柱状图的函数为bar,其语法格式.
    plt.bar(x, height, width=0.8, bottom=None, *, align=‘center’, **kwargs)
    参数说明:
    1)x: 表示x轴的刻度数目。
    2)height:表示x轴对应的数据值,y值(柱的高度)。
    3)width:每个柱的宽度。(0,1)之间的float,默认0.8.
    4)bottom:柱状图的y边界的起点。默认0.
    5)align: x 轴上的坐标与柱体对齐的位置。center(居中),edge(边)。
    6)color:柱状的填充颜色
    7)tick_label: 每个柱体的标签名称
    8)alpha: 柱状填充颜色的透明度
    9)edgecolor: 柱体的边框颜色
    10)linewidth: 柱体边框线的宽度

二、bar()实践练习

  • 绘制2007–2016年的全国就业人员,城镇就业人员和乡村就业人员的柱状图(Employedpopulation.csv)。
    其中,全国就业人员(万人)用红色的柱状表示,城镇就业人(万人)用绿色的柱状表示,乡村就业人员(万人)用蓝色的柱状表示。

1.源程序代码

import numpy as np
import matplotlib.pyplot as plt
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
                     usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号

#创建一个绘图对象, 并设置对象的宽度和高度
plt.figure(figsize=(12, 4))
#绘制全部就业人员柱状图
plt.bar(Emp_data[0],Emp_data[1], width = 0.3,color = 'red')
#绘制城镇就业人员柱状图
plt.bar(Emp_data[0],Emp_data[2],width = 0.3,color = 'green')
#绘制乡村就业人员柱状图
plt.bar(Emp_data[0],Emp_data[3], width = 0.3,color = 'blue')

x = [i for i in range(2006,2017)]
plt.xlabel('年份')
plt.ylabel('人员(万人)')
plt.ylim((30000,80000))
plt.xlim(2006,2017)
plt.xticks(x)
plt.title("2007-2016年城镇、乡村和全部就业人员情况柱状图")
#添加图例
plt.legend(('全部就业','城镇就业','乡村就业'))
plt.savefig('Employedpopulation_bar.png')
plt.show()

在这里插入图片描述
2.调整柱状图的宽度,平移后柱显示的位置¶

import numpy as np
import matplotlib.pyplot as plt
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
                     usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号

#创建一个绘图对象, 并设置对象的宽度和高度
plt.figure(figsize=(12, 4))
#绘制全部就业人员柱状图,向前平移柱 0.3
plt.bar(Emp_data[0]-0.3,Emp_data[1], width = 0.3,color = 'red')
#绘制城镇就业人员柱状图 
plt.bar(Emp_data[0],Emp_data[2],width = 0.3,color = 'green')
#绘制乡村就业人员柱状图,向后平移柱 0.3,
plt.bar(Emp_data[0]+0.3,Emp_data[3], width = 0.3,color = 'blue')

x = [i for i in range(2006,2017)]
plt.xlabel('年份')
plt.ylabel('人员(万人)')
plt.ylim((30000,80000))
plt.xlim(2006,2017)
plt.xticks(x)
plt.title("2007-2016年城镇、乡村和全部就业人员情况柱状图")
#添加图例
plt.legend(('全部就业','城镇就业','乡村就业'))
plt.savefig('Employedpopulation_bar.png')
plt.show()

在这里插入图片描述
3.给图加文字text, plt.text()

采用循环设置文字增加的位置。
for x,y in zip(X,Y1):
plt.text(x+a, y+b, ‘%.2f’ % y, ha=‘center’, va= ‘bottom’)
其中a,b为偏移量。

import numpy as np
import matplotlib.pyplot as plt
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
                     usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号

#创建一个绘图对象, 并设置对象的宽度和高度
plt.figure(figsize=(12, 4))
#绘制全部就业人员柱状图,向前平移柱 0.3
plt.bar(Emp_data[0]-0.3,Emp_data[1], width = 0.3,color = 'red')
#绘制城镇就业人员柱状图 
plt.bar(Emp_data[0],Emp_data[2],width = 0.3,color = 'green')
#绘制乡村就业人员柱状图,向后平移柱 0.3,
plt.bar(Emp_data[0]+0.3,Emp_data[3], width = 0.3,color = 'blue')
# 给图加text
X = Emp_data[0]    #设置 X坐标
Y1 = Emp_data[1]   #设置 y坐标
for x, y in zip(X, Y1):
    plt.text(x - 0.3, y +1000, '%i' % y, ha='center')
Y2 = Emp_data[2]
for x, y in zip(X, Y2):
    plt.text(x , y + 1000, '%i' % y, ha='center')

Y3 = Emp_data[3]
for x, y in zip(X, Y3):
        plt.text(x + 0.3, y + 1000, '%i' % y, ha='center')

x = [i for i in range(2006,2017)]
plt.xlabel('年份')
plt.ylabel('人员(万人)')
plt.ylim((30000,81000))
plt.xlim(2006,2017)
plt.xticks(x)

plt.title("2007-2016年城镇、乡村和全部就业人员情况柱状图")
#添加图例
plt.legend(('全部就业','城镇就业','乡村就业'))
plt.savefig('Employedpopulation_bar.png')
plt.show()

在这里插入图片描述

4.对比数据较少时选择柱形图(bar())。也可将柱形图转换为条形图(barh())

plt.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)

barh() 函数中 height 代表的是横向柱子的宽度。

import numpy as np
import matplotlib.pyplot as plt
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
                     usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号

#创建一个绘图对象, 并设置对象的宽度和高度
plt.figure(figsize=(8, 4))
#绘制全部就业人员柱状图,向前平移柱 0.3
plt.barh(Emp_data[0]+0.3,Emp_data[1], color = 'red',height=0.3)
#绘制城镇就业人员柱状图 
plt.barh(Emp_data[0],Emp_data[2],color = 'green',height=0.3)
#绘制乡村就业人员柱状图,向后平移柱 0.3,
plt.barh(Emp_data[0]-0.3,Emp_data[3], color = 'blue',height=0.3)


# 给图加text
y = [i for i in range(2006,2017)]
plt.ylabel('年份')
plt.xlabel('人员(万人)')
plt.xlim((30000,81000))
plt.ylim(2006,2017)
plt.yticks(y)


plt.title("2007-2016年城镇、乡村和全部就业人员情况柱状图")
#添加图例
plt.legend(('全部就业','城镇就业','乡村就业'))
plt.savefig('Employedpopulation_bar.png')
plt.show()

在这里插入图片描述

5.bar()与barh()图的选取

  • 柱形图与条形图在绘制时,从图可观察到,横坐标与纵坐标互换了位置。
    条形图的优势:当要绘制不同项目的文字较长且类别过多时,柱形图由于横轴空间有限,通常无法完全展示出全部文字,而条形图可以完全展示文字信息,而不会发生截断或省略的问题。
    如,统计不同网站某本书的购买价格。并绘制条形图与柱形图。
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#不同网站书价格数据
price = [39.5, 39.9, 45.4, 38.9, 33.34,37.89,37.5]
#创建画布
plt.figure(figsize=((8,6)))
plt.subplot(211)
#绘制第一个图
name=['当当网', '中国图书网', '京东商城图书', 
      '天猫','苏宁易购','淘宝网','亚马逊-电子图书']

plt.barh(range(7), price, height=0.7, color='steelblue', alpha=0.8)      
# 从下往上画
plt.yticks(range(7),name )
plt.xlim(30,47)
plt.xlabel("价格")
plt.ylabel('不同平台')
plt.title("不同平台《XX》书的价格一览--条形图")
for x, y in enumerate(price):
    plt.text(y + 0.2, x - 0.1, '%s' % y)
plt.subplot(212)
plt.ylabel('价格')
plt.xlabel('不同平台')

plt.xticks(range(7),name)
plt.title("不同平台《XX》书的价格一览--柱形图")
plt.tight_layout(3,1,1)
plt.ylim(10,50)
for x, y in enumerate(price):
    plt.text(x-0.2, y + 0.5, '%s' % y)
plt.bar(name,price,0.7,color='pink')
plt.show()
#对比柱状图和条形图的效果!

在这里插入图片描述

三、绘制直方图

  • 直方图(Histogram)又称为质量分布图,是一种二维统计图表。它是由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,用纵轴表示数量或者占比。
    plt.hist(x, bins=10, range=None,
    weights=None, cumulative=False, bottom=None,
    histtype=‘bar’, align=‘mid’, orientation=‘vertical’,
    rwidth=None, log=False, color=None,
    label=None, stacked=False)

  • 参数说明:
    1)x:指定要绘制直方图的数据。
    2)bins:指定直方图条形的个数。接收int,序列或auto.
    3)range:指定直方图数据的上下界,忽略较低或较高的异常值。默认包含绘图数据的最大值和最小值。
    4)density=True 表示频率分布;density=False 表示的是频数分布。默认False.
    5)weights:该参数可为每一个数据点设置权重。与x形状相同的权重数组。将x中的每个元素乘以对应权重值再计数。如果density取值为True,则会对权重进行归一化处理。这个参数可用于绘制已合并的数据的直方图。
    6)cumulative:是否需要计算累计频数或频率。布尔值,如果为True,则计算累计频数。如果density取值为True,则计算累计频率。
    7)bottom:可以为直方图的每个条形添加基准线,默认为0。每个柱子底部相对于y=0的位置。如果是标量值,则每个柱子相对于y=0向上/向下的偏移量相同。如果是数组,则根据数组元素取值移动对应的柱子。
    8)histtype:指定直方图的类型,默认为’bar’,除此之外,还有’barstacked’,‘step’, ‘stepfilled’。
    9)align:设置条形边界值的对齐方式,默认为mid,另外还有left和right。
    10)orientation:设置直方图的摆放方向,默认为垂直方向。
    11)rwidth:设置直方图条形的宽度。
    12)color:设置直方图的填充色。
    13)edgecolor:设置直方图边框色。
    14)label:设置直方图的标签,可通过legend展示其图例。
    15)stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放。

四、hist()实践练习

1.工资分布情况图
绘制某单位的员工工资(salary.csv)分布图。
按分段1000-3000,3000-5000,5000-7000,7000-9000,9000~12000统计员工工资情况。

import numpy as np
import matplotlib.pyplot as plt

salary= np.loadtxt('salary.csv',delimiter = ",",
                     usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False 

plt.figure(figsize=((14,6)))

group = [i for i in range(1000,13000,2000)]
plt.xticks(group)        
plt.hist(salary, group,rwidth=0.8,histtype='bar')
plt.show()

在这里插入图片描述
2.hist()的返回值

import numpy as np
import matplotlib.pyplot as plt

salary= np.loadtxt('salary.csv',delimiter = ",",
                     usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False 

plt.figure(figsize=((14,6)))

group = [i for i in range(1000,13000,2000)]
plt.xticks(group)        
return_V=plt.hist(salary, group,rwidth=0.8,histtype='bar')
print(return_V)       #返回一个元组
plt.show()

在这里插入图片描述
3.hist()的默认频数,density=True频率分布

import numpy as np
import matplotlib.pyplot as plt

salary= np.loadtxt('salary.csv',delimiter = ",",
                     usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False 

plt.figure(figsize=((14,6)))

group = [i for i in range(1000,13000,2000)]
plt.xticks(group)        
plt.hist(salary, group,rwidth=0.8,histtype='bar',density=True)

plt.show()

在这里插入图片描述
4.不分组,设定bins参数绘制分布情况

import numpy as np
import matplotlib.pyplot as plt

salary= np.loadtxt('salary.csv',delimiter = ",",
                     usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False 

plt.figure(figsize=((14,6)))
x=[i for i in range(1000,14000,1000)]
plt.xticks(x) 
plt.xlim(2000,12000)
plt.hist(salary,bins=20,rwidth=0.8,histtype='bar')
plt.show()

在这里插入图片描述
5.histtype参数。
指定直方图的类型(‘bar’(默认),‘barstacked’,‘step’,‘stepfilled’)
1).'bar’是传统的条形直方图;
2).'barstacked’是堆叠的条形直方图;
3).'step’是未填充的条形直方图,只有外边框;
4).‘stepfilled’是有填充的直方图。
当histtype取值为’step’或’stepfilled’,rwidth设置失效,即不能指定柱子之间的间隔,默认连接在一起

import numpy as np
import matplotlib.pyplot as plt

salary= np.loadtxt('salary.csv',delimiter = ",",
                     usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False 

plt.figure(figsize=((14,6)))
x=[i for i in range(1000,14000,1000)]
plt.xticks(x) 
plt.xlim(2000,12000)
plt.hist(salary,bins=10,rwidth=0.8,histtype='barstacked',color='r')
plt.hist(salary,bins=20,rwidth=0.3,histtype='step',color='b')
plt.show()

在这里插入图片描述

五、饼图

  • 饼图(Pie Graph)是显示一个数据系列中各项的大小与各项总和的比例。
    饼图中的数据点显示为整个饼图的百分比。饼图可以比较清楚地反映出部分与部分、部分与整体之间的比例关系。易于显示每组数据相对于总数的大小,而且显示方式直观。
    例如不同品类的利润占比、不同类型客户的销售额占比、总体中各组成部分所占比重等。
    pyplot中绘制饼图的函数为pie,其语法格式:
    pie(x, explode=None, labels=None, colors=None, autopct=None,
    pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None,
    radius=None, counterclock=True, wedgeprops=None, textprops=None,
    center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)

  • 参数说明:
    1)x: 绘制饼图的数据;
    2)labels: 每一块区域的说明文字(饼图外侧显示);
    3)explode :每一块区域离开中心的距离;
    4)startangle :起始角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;
    5)shadow :在饼图下面画一个阴影。默认值:False,即不画阴影;
    6)labeldistance :label标记的绘制位置,相对于半径的比例,默认值为1.1, 如1则绘制在饼图内侧;
    7)autopct :控制饼图内百分比设置,可以使用format字符串或者format function
    '%1.1f’指小数点前后位数(没有用空格补齐);
    8)pctdistance :类似于labeldistance,指定autopct的位置刻度,默认值为0.6;
    9)radius :控制饼图半径,默认值为1;counterclock :指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={‘linewidth’:3}设置wedge线宽为3。
    10)textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。
    11)colors:饼图的颜色。
    12)center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。
    13)frame :布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。

  1. rotatelabels :布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。

六、pie()实践练习

绘制2016年城镇就业人员和乡村就业人员(Employedpopulation.csv)的饼图。

1.源程序代码

import numpy as np
import matplotlib.pyplot as plt
#导入2016年就业数据
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
                     usecols=(1),dtype=int)

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   
plt.rcParams['axes.unicode_minus']=False     

#提取2016年城镇就业数据和乡村就业数据赋值给X
X = [Emp_data[2],Emp_data[3]]

#创建一个绘图对象, 将画布设定为正方形,则绘制的饼图是正圆
plt.figure(figsize=(7, 7))
label = ['城镇就业','乡村就业']  #定义饼图的标签,标签是列表

explode = [0.01,0.02]  #设定各项距离圆心的n半径

#绘制饼图(数据,半径,数据对应的标签,百分数保留两位小数点)
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%')
#添加标题
plt.title("2016年城镇和乡村就业人员情况饼图")
#添加图例
plt.legend({'城镇就业','乡村就业'})
plt.savefig('Employedpopulation_pie.png')
plt.show()

2.设置饼图的颜色

  • 1.设置color参数为饼图配色
    2.在matplotlib中,颜色设置多种方式。
    (1)常用red, 简写为r;green,简写为g;blue,简写为b;yellow,简写为y;cyan,简写为c ;magenta,简写为m;black,简写为k;white,简写为w。
    (2)X11系列颜色通过名称来对应具体的颜色编码,后来的CSS颜色代码也是在其基础上发展而来,在matplotlib中,X11/CSS4相关的颜色名称和十六进制编码存储在一个字典中,可以通过以下方式进行查看。
    import matplotlib._color_data as mcd
    for key in mcd.CSS4_COLORS:
    print(‘{}: {}’.format(key, mcd.CSS4_COLORS[key]))
    (3) RGB/RGBA元组
    所有的颜色都是有RGB三原色构成,在matplotlib中,可以通过一个元组来表示red, green, blue三原色的比例,以及一个可选的alpha值来表示透明度,取值范围都是0到1,用法如下
    plt.pie(x=[1,2,3,4], colors=[(0.1, 0.2, 0.5),(0.1, 0.3, 0.5),(0.1, 0.4, 0.5),(0.1, 0.5, 0.5)])
import matplotlib._color_data as mcd
for key in mcd.CSS4_COLORS:
    print('{}: {}'.format(key, mcd.CSS4_COLORS[key]))
#创建一个绘图对象, 将画布设定为正方形,则绘制的饼图是正圆
plt.figure(figsize=(7, 7))

#设置饼图的颜色
color=['royalblue','#FFF5EE']

plt.pie(X,explode = explode, labels=label,autopct='%.3f%%',colors=color)
#添加标题
plt.title("2016年城镇和乡村就业人员情况饼图")
#添加图例
plt.legend({'城镇就业','乡村就业'})

plt.show()

在这里插入图片描述

3.设置文字标签

  • textprops={‘fontsize’:18,‘color’:‘k’} 设置为字体大小为18,颜色黑色¶
#创建一个绘图对象, 将画布设定为正方形,则绘制的饼图是正圆
plt.figure(figsize=(7, 7))
label = ['城镇就业','乡村就业']  #定义饼图的标签,标签是列表
explode = [0.01,0.02]  #设定各项距离圆心的n半径

#设置文字标签
textprops={'fontsize':16,'color':'k'}

color=['royalblue','#FFF5EE']
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%',
        colors=color,textprops=textprops)
#添加标题
plt.title("2016年城镇和乡村就业人员情况饼图")
#添加图例
plt.legend({'城镇就业','乡村就业'})

plt.show()

在这里插入图片描述
4.设置饼图的分离与阴影

  • 饼图分离 explode 值的设置,阴影:shadow=True
#创建一个绘图对象, 将画布设定为正方形,则绘制的饼图是正圆
plt.figure(figsize=(7, 7))

label = ['城镇就业','乡村就业']  #定义饼图的标签,标签是列表

#设定各项距离圆心的半径
explode = [0.0,0.06]  

#设置文字标签
textprops={'fontsize':18,'color':'k'}

color=['royalblue','#FFF5EE']
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%',
        colors=color,textprops=textprops,shadow=True)
#添加标题
plt.title("2016年城镇和乡村就业人员情况饼图")
#添加图例
plt.legend({'城镇就业','乡村就业'})

plt.show()

在这里插入图片描述
5.设置起始角度 startangle

plt.figure(figsize=(4,6))
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%',
        colors=color,textprops=textprops,shadow=True,startangle=90)
#添加标题
plt.title("2016年城镇和乡村就业人员情况饼图")
#添加图例
plt.legend({'城镇就业','乡村就业'})
plt.show()

在这里插入图片描述

6.项目实践

  • 已知某班级的高等数学、程序设计课程考试成绩(student.xlsx),要求绘制饼状图显示每门课的成绩中优(85分以上)、及格(60-84分)、不及格(60分以下)的占比。
import numpy as np
import matplotlib.pyplot as plt

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   
plt.rcParams['axes.unicode_minus']=False   

#导入学生成绩 高等数学 ma,程序设计 pr
data= np.loadtxt('student.csv',delimiter=',',
                  usecols=(1,2),dtype=np.int,skiprows=1)
# 统计每个分数段的人数
ma_count=[]
for num in data.T:
    n=m=k=0
    for i in num:
        if i>=85:
            n=n+1
        elif i>=60:
            m=m+1
        else:
            k=k+1
    ma_count.append([n,m,k])
    
#定义饼图的标签和距离
label = ['优秀','及格','不及格']  
explode =[0.0,0.0,0.08]
# 给饼图配色
color=['#FF69B4','#6495ED','#9ACD32']
plt.figure(figsize=(10,10))

plt.subplot(121)
plt.title("高等数学分布情况")
plt.pie(ma_count[0], labels=label,autopct='%.2f%%',explode=explode,
        colors=color,shadow=True)
plt.legend(loc=4)

plt.subplot(122)
plt.title("程序设计成绩分布情况")
plt.pie(ma_count[1], labels=label,autopct='%.2f%%',explode=explode,
        colors=color,shadow=True)

#添加图例
plt.legend(loc=4)
plt.show()

在这里插入图片描述
若设置为五个等级:优秀,良好,中等,及格,不及格。

import numpy as np
import matplotlib.pyplot as plt

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   
plt.rcParams['axes.unicode_minus']=False   

#导入学生成绩 高等数学 ma,程序设计 pr
data= np.loadtxt('student.csv',delimiter=',',
                  usecols=(1,2),dtype=np.int,skiprows=1)

# 统计每个分数段的人数
ma_count=[]
#创建一个空列表
for num in data.T:
    n=m=k=j=r=0
    #设置初始值
    for i in num:
        if i>=95:
            n=n+1
            #获优秀的人数
        elif i>=85:
            m=m+1
            #获良好的人数
        elif i>=70:
            k=k+1
            #获得中等的人数
        elif i>=60:
            j=j+1
            #获得及格的人数
        else:
            r=r+1
            #获不及格的人数
    ma_count.append([n,m,k,j,r])
    
#定义饼图的标签和距离
label = ['优秀','良好','中等','及格','不及格']  
#指的是这一块离中心点的距离
explode =[0.05,0.05,0.05,0.05,0.05]
# 给饼图配色
color=['#FF69B4','#6495ED','#9ACD32','#FFE4E1','#808080']
# 设置了五个颜色
plt.figure(figsize=(10,10))

plt.subplot(121)
plt.title("高等数学分布情况")
plt.pie(ma_count[0], labels=label,autopct='%.2f%%',explode=explode,
        colors=color,shadow=True)
#添加图例
plt.legend(loc=4)

plt.subplot(122)
plt.title("程序设计成绩分布情况")
plt.pie(ma_count[1], labels=label,autopct='%.2f%%',explode=explode,
        colors=color,shadow=True)
#添加图例
plt.legend(loc=4)
#loc=4 使其位置在右下角,否则会放在其他系统认为最合适的地方


print(data)
plt.savefig('StudentsGrades_pie.png')
plt.show()

在这里插入图片描述

以上,matplotlib库关于直方图,柱状图,条形图,饼图的内容就介绍到这里,你学会了吗?

如果需要以上的数据表来模拟,请联系编辑者QQ:2122961493领取。

  • 8
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KirinLee_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值