各省GDP的excel文件如图所示
编写一个程序,计算每年各省GDP信息的和,生成条状图显示 要求窗口大小10,10,图表标题为GDP条状图
为了完成本关任务,你需要掌握: 1.数据汇总 2.matplotlib库的使用 3.如何建立条状图 4.设置图表参数
dataframe对象的Groupby可以根据一个或多个键对DataFrame计算分组摘要统计,count计数、sum求和、mean平均值、std标准差 例如,要将df对象数据按教师列汇总求学生的个数 df.groupby(["教师"])["学号"].count()
导入pyplot import matplotlib.pyplot as plt
在图表中显示中文 为了正确显示中文字体,请用以下代码更改默认设置,其中'SimHei'表示黑体字。
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
plt 库的显示函数 使用figure()函数创建一个全局绘图区域,并且使它成为当前的绘图对象, figsize参数可以指定绘图区域的宽度和高度,单位为英寸。 例如 plt.figure(figsize=(8,4)) 建立一个8英寸长4英寸宽的窗口
bar(x, height, alpha=1, width, color=, edgecolor=, label=, linewidth)
参数: x:x轴的位置序列,一般采用arange函数产生一个序列; height:y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据; alpha:透明度 width:为柱形图的宽度 color:柱形图填充的颜色; edgecolor:图形边缘颜色 label:解释每个图像代表的含义 linewidth :边缘线的宽度
import matplotlib
import matplotlib.pyplot as plt
x=["mary","mike","harry","tom","jerry","rose"]
y=[84.12,91.83,79.89,60.19,96.83,75.09]
#设置y轴的值
plt.bar(x,height=y,width=0.5, color='b')
#根据x和y绘制条形,条形宽度0.5,颜色蓝色
plt.show()
plt.xlim(xmin,xmax) 设置当前x轴取值范围 plt.ylim(xmin,xmax) 设置当前y轴取值范围 plt.xlabel(s) 设置当前x轴的标签 plt.ylabel(s) 设置当前y轴的标签 plt.title() 设置标题
import pandas
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
data=pandas.read_excel("test/各省GDP.xlsx",dtype={"年份":str})
#代码开始
x = data.groupby(["年份"])["GDP"].sum()
fig = plt.figure(figsize=(10, 10))
plt.bar(x.index, x)
plt.title('GDP条状图')
plt.show()
#代码结束
plt.savefig("image1/gdptxt.jpg")
银行分布excel文件如图所示
编写一个程序,将银行信息按省份对银行编号进行汇总 生成饼图显示各省银行的个数 要求绘图窗口为10,10 标题为银行省份分布图 饼图外侧显示省份的前2个字
pie(x, explode=None, labels=None,colors=('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'),
autopct=None, shadow=False,labeldistance=1.1, radius=None)
参数: x (每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
labels (每一块)饼图外侧显示的说明文字
explode (每一块)离开中心距离 s
tartangle 起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起
shadow 是否阴影
labeldistance label绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧
autopct 控制饼图内百分比设置,可以使用format字符串指小数点前后位数
radius 控制饼图半径
import pandas
import matplotlib
matplotlib.use("agg")
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
data=pandas.read_excel("test/银行信息.xlsx")
#代码开始
fig = plt.figure(figsize=(10, 10))
x = data.groupby(['省份'])['银行编号'].count()
plt.pie(x, labels= x.index.str[:2])
plt.title('银行省份分布图')
#代码结束
plt.savefig("image2/yhbt.jpg")
银行分布excel文件如图所示
编写一个程序,将银行信息按银行种类对银行编号进行汇总 生成折线图显示银行数量最高的十个银行 按银行种类个数的降序排列 要求绘图窗口为10,10 标题为银行种类折线图
折线图就是将多个(x,y)点连接起来,生成一个折线图。
plot([x], y, [fmt], data=None,**kwargs)
函数用于绘制一条折线图,x若省略,则plot函数自动创建从0开始的 x坐标;fmt是字符串类型,用于描述颜色标志线型属性的值,格式为:[color][marker][line]
;
import pandas
import matplotlib
matplotlib.use("Agg")
import numpy as np
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
data=pandas.read_excel("test/银行信息.xlsx")
#代码开始
x = data.groupby(['银行种类'])['银行编号'].count()
fig = plt.figure(figsize=(10, 10))
x = x.sort_values(ascending=False)
x = x.head(10)
plt.plot(x.index, x)
plt.title('银行种类折线图')
#代码结束
plt.savefig("image3/yhzxt.jpg")
本关任务:根据统计数据工作簿的日期统计数据,建立折线图
为了完成本关任务,你需要掌握:1.如何使用matplotlib生成图表,2.如何设置图表的参数。3.datetime的使用
导入pyplot import matplotlib.pyplot as plt
在图表中显示中文 为了正确显示中文字体,请用以下代码更改默认设置,其中'SimHei'表示黑体字。
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
plt 库的显示函数 使用figure()函数创建一个全局绘图区域,并且使它成为当前的绘图对象, figsize参数可以指定绘图区域的宽度和高度,单位为英寸。 例如 plt.figure(figsize=(8,4)) 建立一个8英寸长4英寸宽的窗口
折线图就是将多个(x,y)点连接起来,生成一个折线图。 plot([x], y, [fmt], data=None,**kwargs)
函数用于绘制一条折线图,x若省略,则plot函数自动创建从0开始的 x坐标;fmt是字符串类型,用于描述颜色标志线型属性的值,格式为:'[color][marker][line]’;
设置标题、轴标签和刻度标签
plt.xlim(xmin,xmax) 设置当前x轴取值范围
plt.ylim(xmin,xmax) 设置当前y轴取值范围
plt.xlabel(s) 设置当前x轴的标签
plt.ylabel(s) 设置当前y轴的标签
plt.title() 设置标题
plt.xticks(pd.date_range(起始日期,结束日期)) 设置x轴日期开始日期和结束日期
plt.gca().xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%Y-%m-%d')) 设置x轴日期格式
补充:pandas.date_range(start=None, end=None, periods=None, freq='D') 该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定start、end、periods中的两个参数值,否则报错。 主要参数说明: periods:固定时期,取值为整数或None freq:日期偏移量,取值为string或DateOffset,默认为'D'
例:以下代码可以设置日期格式为年-月-日,设置x轴的取值范围为2021-1-1到2021-5-31日,在x轴垂直显示2021-1-1 到2021-5-31,
plt.gca().xaxis.set_major_formatter(datetime.date.DateFormatter('%Y-%m-%d'))
plt.xlim(datetime.date(2021,1,1),datetime.date(2021,5,31))
plt.xticks(pd.date_range('2021-1-1','2021-5-31'),rotation=90)
根据提示,在右侧编辑器补充代码,根据统计数据工作簿的日期统计数据,建立折线图。
平台会对你编写的代码进行测试: 产生的折线图如任务描述所示,x轴为日期,y轴为合计金额 图表窗口宽10高14 图表标题为日期销售 要求x轴设置标签为日期,范围为2000-5-20至2000-7-18,并显示日期 y轴设置标签为金额,范围为0到1800 提示:在绘制图形时日期标签需要垂直排列 设置rotation=90
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
import datetime
df=pd.read_excel("tbsc/step1/统计数据.xlsx",sheet_name="日期统计")
#代码开始
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10,14))
plt.title('日期销售')
plt.xlabel('日期')
plt.ylabel('金额')
plt.ylim(0, 1800) # y宽度
plt.gca().xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%Y-%m-%d')) # 日期格式
plt.xlim(datetime.date(2000,5,20), datetime.date(2000,7,18)) # 日期范围
plt.xticks(pd.date_range('2000-5-20', '2000-7-18'), rotation=90) # 垂直显示日期 90
plt.plot(df['日期'].dt.date, df['合计金额'])
#代码结束
plt.savefig("image4/rqzxt.jpg")
本关任务:根据excel文件“类别销售”工作簿(tbsc/step2/类别销售.xlsx)的烟、零食、饮料、酒工作表的数据,找出销售数量合计最高的三种商品,建立条状图
为了完成本关任务,你需要掌握:1.如何建立条状图,2.如何绘制子图。
bar(x, height, alpha=1, width, color=, edgecolor=, label=, linewidth)
参数: x:x轴的位置序列,一般采用arange函数产生一个序列; height:y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据; alpha:透明度 width:为柱形图的宽度 color:柱形图填充的颜色; edgecolor:图形边缘颜色 label:解释每个图像代表的含义 linewidth :边缘线的宽度
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
y=[84.12,81.83,79.89,78.19,76.83,75.09,74.58,73.71]
#设置y轴的值
sj=np.linspace(1,8,8)
#设置x轴的位置
plt.bar(x=sj, height=y,width=0.5, color='b')
#根据x和y绘制条形,条形宽度0.5,颜色蓝色
plt.show()
subplot(numRows, numCols, plotNum)
参数: 图表的整个绘图区域被分成 numRows 行和 numCols 列
然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1
plotNum 参数指定创建的 Axes 对象所在的区域
plt.subplot(2,2,1) 图表的整个绘图区域被分成2行和2列 选择左上区域作为当前的绘图区域
根据提示,在右侧编辑器补充代码,按要求输出图形。 图形的宽度为10,高度为14 四个子图分别为烟,饮料,零食,酒四个类别的三种销量最高的商品的销售量 柱形的横轴坐标分别为0,0.5,1,每个柱形的宽度为0.2,图例为商品名称。 在每个柱形上标识使出数量的文字(高度比柱形高1) 每个子图的标题为商品类别,x轴分别标识1,2,3 每个子图需要显示图例
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
#代码开始
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10,14))
lb=["烟","饮料","零食","酒"]
count = 1
for x in lb:
df=pd.read_excel("tbsc/step2/类别销售.xlsx",sheet_name=x)
sj=df.groupby("商品名称")["数量"].sum()
sj.sort_values(ascending=False,inplace=True)
sj.index=sj.index.str.replace("\t","") # 替换
sp=sj[:3] # 前三
plt.subplot(2,2,count) # 创建子图
for i in range(0,3):
plt.bar(x=i*0.5, height=sj[i],width=0.2,label=sj.index[i])
plt.text(i*0.5,sj[i]+1,sj[i])
count += 1
plt.xticks([0,0.5,1],[1,2,3])
plt.title(x)
plt.legend()
#代码结束
plt.savefig("image5/lbzxt.jpg")
本关任务:根据统计数据工作簿的类别统计数据,建立饼图。 将合计金额小于合计金额的平均值1/5的数据,统计到其他类别。
为了完成本关任务,你需要掌握:如何建立饼图
pie(x, explode=None, labels=None,colors=('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'), autopct=None,
shadow=False,labeldistance=1.1, radius=None)
参数: x (每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
labels (每一块)饼图外侧显示的说明文字
explode (每一块)离开中心距离
startangle 起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起
shadow 是否阴影
labeldistance label绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧
autopct 控制饼图内百分比设置,可以使用format字符串指小数点前后位数
radius 控制饼图半径
根据提示,在右侧编辑器补充代码,生成如图所示饼图 饼图宽10高10 图表标签为合计金额大于等于合计金额的平均值1/5的类别,加上其他类别 饼图内按保留两位小数的形式显示百分比 图表标题为各类别销售分布
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import pandas as pd
df=pd.read_excel("tbsc/step3/统计数据.xlsx",sheet_name="类别统计")
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
#代码开始
plt.figure(figsize=(10,10))
ds = df["合计金额"].mean()/5 # 1/5
df1 = df.loc[df["合计金额"]>=ds]
qthj=df.loc[df["合计金额"]