赞
踩
作业代码如下:
import matplotlib.pyplot as plt import numpy as np import json import matplotlib.font_manager as font_manager import pandas as pd #显示matplotlib生成的图形 %matplotlib inline df = pd.read_json('data/data31557/20200422.json') #print(df) df["weight_num"] = df["weight"].map(lambda x:float(x[:-2])) labels = ['<45kg','45~50kg','50~55kg','>55kg'] explode = (0.05,0,0,0) # 设置显示中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 plt.figure(figsize=(12,9)) plt.pie(x = pd.cut(df["weight_num"], bins=listBins, labels=labels).value_counts(), # 绘图数据 labels=labels, # 添加标签 autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数 explode=explode, startangle=90, textprops ={'fontsize':14,'color':'black'}, labeldistance=1.05) plt.axis('equal') #该行代码使饼图长宽相等 # plt.legend() plt.title('''《青春有你2》参赛选手''',fontsize = 24) plt.savefig('/home/aistudio/work/result/pie_result03.jpg') plt.show()
输出结果:
分别获取体重为[’<45kg’,‘45-50kg’,‘50~55kg’,’>55kg’]这四个区间的人数。代码如下:
df["weight_num"] = df["weight"].map(lambda x:float(x[:-2]))
labels = ['<45kg','45~50kg','50~55kg','>55kg']
explode = (0.05,0,0,0)
x = pd.cut(df["weight_num"], bins=listBins, labels=labels).value_counts()
第一行代码:
由于获取到的df[“weight”]是‘object’类型,无法使用大小来衡量,所以需要对该字符串进行切片,不要最后的kg即可。其中使用到了map(),与lambda。map是对每一个元素进行相同的操作,lambda是对字符串进行切片操作,切片得到的依旧是字符串,因此需要使用float()来将体重转换为数值型(不能使用int,因为有部分体重是带有小数点)
第二行代码:
labels定义了最后饼图的标签以及后边pandas.cut()会用到
第三行代码:
explode定义了pandas.cut()的切分间隔
第四行代码
主要是对pandas.cut(),这个函数的具体使用方法可以参考以下官方链接:
链接: http://pandas.pydata.org/pandasdocs/stable/generated/pandas.cut.html
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise') #0.23.4
x:被切分的类数组(array-like)数据,必须是1维的(不能用DataFrame);
bins:bins是被切割后的区间(或者叫“桶”、“箱”、“面元”),有3中形式:一个int型的标量、标量序列(数组)或者pandas.IntervalIndex 。一个int型的标量. 当bins为一个int型的标量时,代表将x平分成bins份。x的范围在每侧扩展0.1%,以包括x的最大值和最小值。标量序列. 标量序列定义了被分割后每一个bin的区间边缘,此时x没有扩 .pandas.IntervalIndex
定义要使用的精确区间。
right:bool型参数,默认为True,表示是否包含区间右部。比如如果bins=[1,2,3],right=True,则区间为(1,2],(2,3];right=False,则区间为(1,2),(2,3)。
labels:给分割后的bins打标签,比如把年龄x分割成年龄段bins后,可以给年龄段打上诸如青年、中年的标签。labels的长度必须和划分后的区间长度相等,比如bins=[1,2,3],划分后有2个区间(1,2],(2,3],则labels的长度必须为2。如果指定labels=False,则返回x中的数据在第几个bin中(从0开始)。
retbins:bool型的参数,表示是否将分割后的bins返回,当bins为一个int型的标量时比较有用,这样可以得到划分后的区间,默认为False。
precision:保留区间小数点的位数,默认为3.
include_lowest:bool型的参数,表示区间的左边是开还是闭的,默认为false,也就是不包含区间左部(闭)duplicates:是否允许重复区间。有两种选择:raise:不允许,drop:允许。
绘制饼图
plt.figure(figsize=(12,9))# 设置图片大小
plt.pie(x = pd.cut(df["weight_num"], bins=listBins, labels=labels).value_counts(), # 绘图数据
labels=labels, # 添加标签
autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
explode=explode,
startangle=90,
textprops ={'fontsize':14,'color':'black'},
labeldistance=1.05)
plt.axis('equal') #该行代码使饼图长宽相等
# plt.legend()
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/pie_result03.jpg')
plt.show()
其中主要是plt.pie()的使用。
官方链接为:
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.pie
matplotlib.pyplot.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, hold=None, data=None)
x : array-like
explode : array-like, optional, default: None(设置饼图偏离)
labels : list, optional, default: None(标签)
colors : array-like, optional, default: None(颜色设置)
autopct : None (default), string, or function, optional(设置百分比显示)
pctdistance : float, optional, default: 0.6(百分比距圆心的位置)
shadow : bool, optional, default: False(设置阴影)
labeldistance : float, optional, default: 1.1(标签距圆心的距离)
startangle : float, optional, default: None(开始位置的旋转角度,第一个分类是在右45度位置)
radius : float, optional, default: None(设置半径的大小)
counterclock : bool, optional, default: True
wedgeprops : dict, optional, default: None
textprops : dict, optional, default: None(设置标签字体大小等)
center : list of float, optional, default: (0, 0)(设置中心位置)
frame : bool, optional, default: False
本次作业中主要使用了labels来添加标签;autopct=’%.1f%%’ 设置百分比的格式,这里保留一位小数;explode=explode设置饼图偏离的距离;startangle=90开始位置的旋转角度为90;textprops{‘fontsize’:14,‘color’:‘black’}标签字体设置;labeldistance=1.05标签距离圆心的位置;
最后使用plt.show()完成作业即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。