超详细matplotlib学习笔记(含折线图、柱状图、直方图、饼状图案例)

    科技2022-08-14  103

    matplotlib:

    能将数据进行可视化,更直观的呈现

    使数据更加客观,更具有说服力

    matplotlib架构:

    上层调用下层后端:实现绘图区域(分配绘图的资源)美工:figure,axes,axis脚本:pyplot

    基础绘图:

    折线图:点的坐标(横坐标、纵坐标)figure(绘制画图区域),plot,show(展示坐标轴)xticks,yticks(设置刻度,中文)xlable,ylable(设置坐标轴解释)plot(参数)(绘制坐标)lengend(设置显示图例)plt.subplots(nrows=Num,ncols=Num,figsize=(20,8))(实现多个坐标系的图绘制)

    直方图:

    组数:数据按照不同的范围分成几个组

    组距:每个组两个端点的差

    API:

    plt.hist(x,bins=None,normed=None,**kwargs)

    plt.grid(True,linestyle=’–’,alpha=0.5):显示网格

    对比:

    直方图:适合x坐标是连接的数据,数据量大柱状图:适合类别少、数据量小

    饼图:

    应用场景:表示不同分类的占比情况API:plt.pie(x,explode=List,labels=None,autopct=’%1.2f%%’,colors=List,shadow=True,startangle=Num)绘制:注意显示整圆形 plt.axis(‘equal’)

    K线图

    API:

    candlestick_ochl(axes,day,width=0.2,colorup=‘r’,colordown=‘g’)

    折线图、柱状图、直方图、饼状图案例

    折线图初体验 # 实现温度变化(折线图)的绘制 #1、先生成fig plt.figure(figsize=(20,8)) # 2、准备数据、折现图点,x,y坐标个数一一对应 x = range(10) y = range(10,20) plt.plot(x,y) # 3、显示调用show() plt.show()

    折线图初体验 # 画出温度变化图 # 创建一个figure plt.figure(figsize=(20,8)) # 准备x,y坐标的数据 x = range(60) y_shanghai = [random.uniform(15,18) for i in x] # 画折现图 plt.plot(x,y_shanghai) plt.show()

    两个城市的温度在一个坐标系显示 # 显示某城市的温度变化图,11-12 # 调价刻度调节 plt.figure(figsize=(20,8)) # 准备x,y坐标的数据 x = range(60) # 准备上海y轴坐标 y_shanghai = [random.uniform(15,18) for i in x] # 准备北京的y轴坐标 y_beijing = [random.uniform(1,3) for i in x] # 设置中文刻度值 x_ch = ["11点{}分".format(i) for i in x] y_ticks = range(40) # 画折现图 plt.plot(x,y_shanghai,label='上海') plt.plot(x,y_beijing,color='r',linestyle='--',label='北京') # 修改刻度值 # 指定显示的x刻度的列表 # 第一个参数:必须是值 # 第二个参数:指定跟第一个参数对应的中文 # y 0-40 plt.xticks(x[::5],x_ch[::5],fontsize=20) plt.yticks(y_ticks[::5],fontsize=20) # 增加标题,坐标轴描述 plt.xlabel('时间',fontsize=20) plt.ylabel('温度',fontsize=20) plt.title('一些城市从11点到12点之间的温度',fontsize=20) # 增加图例的显示 plt.legend(loc='best',fontsize=20) plt.show()

    两个城市的温度,在多个坐标系显示 # 两个城市的温度,在多个坐标系中显示 # 调价刻度调节 # plt.figure(figsize=(20,8)) fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(20,8)) # 准备数据 x = range(60) # 准备上海y轴坐标 y_shanghai = [random.uniform(15,18) for i in x] # 准备北京的y轴坐标 y_beijing = [random.uniform(1,3) for i in x] # 设置中文刻度值 x_ch = ["11点{}分".format(i) for i in x] y_ticks = range(40) # 画折现图 ax[0].plot(x,y_shanghai,label='上海') ax[1].plot(x,y_beijing,color='r',linestyle='--',label='北京') # 修改刻度值 # 指定显示的x刻度的列表 # 第一个参数:必须是值 # 第二个参数:指定跟第一个参数对应的中文 # y 0-40 ax[0].set_xticks(x[::5],x_ch[::5]) ax[1].set_xticks(x[::5],x_ch[::5]) ax[0].set_yticks(y_ticks[::5]) ax[1].set_yticks(y_ticks[::5]) # 增加标题,坐标轴描述 ax[0].set_xlabel('时间',fontsize=20) ax[0].set_ylabel('温度',fontsize=20) ax[0].set_title('一些城市从11点到12点之间的温度',fontsize=20) ax[1].set_xlabel('时间',fontsize=20) ax[1].set_ylabel('温度',fontsize=20) ax[1].set_title('一些城市从11点到12点之间的温度',fontsize=20) # 增加图例的显示 ax[0].legend(loc='best',fontsize=20) ax[1].legend(loc='best',fontsize=20) plt.show()

    电影票房数据的对比(柱状图) # 电影票房数据的对比(柱状图) plt.figure(figsize=(20,8)) # 电影名字,每部电影对应的票房 movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其他'] y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222] # 放进横坐标的数字列表 x = range(len(movie_name)) color = ['b','r','g','y','c','m','y','k','c','g','g'] # 使用plt.bar去显示 # plot.bar:填入的x坐标必须全是数字 plt.bar(x,y,width=0.2,color=color) # 去修改刻度,以及电影名字显示 plt.xticks(x,movie_name,fontsize=16) plt.show()

    对比不同电影的首日、首周的电影票房 # 对比不同电影的首日、首周的电影票房 # 电影票房数据的对比(柱状图) plt.figure(figsize=(20,8)) # 电影名字,每部电影对应的票房 movie_name = ['雷声3:诸神黄昏','正义联盟','寻梦环游记'] first_day = [10587.6,10062.5,1275.7] first_weekend = [36224.9,34479.6,11830] x = range(len(movie_name)) # 使用plt.bar去显示 # plot.bar:填入的x坐标必须全是数字 plt.bar(x,first_day,width=0.2,label='首日票房') plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label='首周票房') # 去修改刻度,以及电影名字显示 plt.xticks([i+0.1 for i in x],movie_name,fontsize=16) # 显示图例 plt.legend(loc='best',fontsize=20) plt.show()

    电影时长分布直方图 # 电影时长分布直方图 # 组数 组距 # 组距:2 # 创建 plt.figure(figsize=(20,8)) time = [131,98,125,131,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,124,127,138,117,121,102,130,138,137,126,128,132,131,119,114,126,115] bins = 2 # 组数 = 极差/组距 group = int((max(time)-min(time))/bins) # 画直方图 # normed参数:指定纵坐标显示频率 # plt.hist(time,group,normed=1) plt.hist(time,group) # 指定刻度的范围,以及步长 plt.xticks(list(range(min(time),max(time)))[::2]) plt.xlabel('电影市场大小',fontsize=20) plt.ylabel('电影的数据量',fontsize=20) # 添加网格 plt.grid(True,linestyle='--',alpha=0.5) plt.show()

    电影的拍片占比显示 # 电影的拍片占比显示 plt.figure(figsize=(20,8)) movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其他'] place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105] color = ['b','r','g','y','c','m','y','k','c','g','g'] # 显示饼图 plt.pie(place_count,labels=movie_name,autopct='%1.2f%%',colors=color) plt.axis('equal') plt.legend(loc='best') plt.show()

    饼状图显示宠物偏爱比例 labels = 'Frogs','Hogs','Dogs','Logs' sizes = [15,30,45,10] explode = (0,0.1,0,0) fi1,ax1 = plt.subplots() ax1.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90) ax1.axis('equal') plt.show()

    Processed: 0.022, SQL: 8