纵向柱状图
# 对比每部电影的票房收入
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 1、准备数据
movie_names = ['雷神3:\n诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
print(len(movie_names))
tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
# 2、画布
plt.figure(figsize = (20,10), dpi = 100)
# 3、绘图(bar)
x = range(len(movie_names))
plt.bar(x,tickets,width=0.6, color=['b','r','g','y','c','m','y','k','c','g','b'])
# 4、刻度
# 如果movie_names中元素过长,无法完全展示,可以在元素中输入换行符
x_label = ["{}".format(i) for i in movie_names]
plt.xticks(x, x_label)
# 添加描述信息
plt.xlabel("电影名称")
plt.ylabel("电影票房")
plt.title("某日票房排名")
# 5、网格
plt.grid(linestyle='--',alpha = 0.6)
# 6、保存图像
plt.savefig("bar01.png")
# 7、展示图像
plt.show()
横向柱状图(条形图)
# 对比每部电影的票房收入
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 1、准备数据
movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
print(len(movie_names))
tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
# 2、画布
plt.figure(figsize = (20,10), dpi = 100)
# 3、绘图(bar)
x = range(len(movie_names))
"""
特别注意
barh横向展示柱状图,此时柱宽不再是weight,而是height
"""
plt.barh(x,tickets,height=0.6, color=['b','r','g','y','c','m','y','k','c','g','b'])
# 4、刻度
# 此时需要修改Y轴的刻度
y_label = ["{}".format(i) for i in movie_names]
plt.yticks(x, y_label)
# 添加描述信息
plt.xlabel("电影名称")
plt.ylabel("电影票房")
plt.title("某日票房排名")
# 5、网格
plt.grid(linestyle='--',alpha = 0.6)
# 6、保存图像
plt.savefig("bar02.png")
# 7、展示图像
plt.show()
多柱状图1
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 1、准备数据
movie_name = ['雷神3:诸神黄昏','正义联盟','寻梦环游记']
first_day = [10587.6,10062.5,1275.7]
first_weekend=[36224.9,34479.6,11830]
# 2、画布
plt.figure(figsize = (20,10), dpi =80)
# 3、绘图
x1 = range(len(movie_name))
plt.bar(x1,first_day,color = 'c',width = 0.2, label='首日')
# x轴需要平移,使首日票房与首周票房的柱状图不重叠,平移一个柱状图的宽度
x2 = [i+0.2 for i in x1]
plt.bar(x2,first_weekend,color = 'y',width = 0.2, label='首周')
# 图例
plt.legend(loc='lower right')
# 修改刻度
# 往右边0.1,居中于两柱之间
plt.xticks([i+0.1 for i in x1],movie_name)
# 网格
plt.grid(linestyle = '--',alpha=0.6)
#
plt.title("首日首周电影票房比对")
plt.xlabel("电影")
plt.ylabel("票房,单位(万)",rotation =0)
plt.savefig("bar03.png")
plt.show()
多柱状图2
a = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
bar_width = 0.2
x1 = range(len(a))
x2 = [i+width for i in x1]
x3 = [i+width*2 for i in x1]
plt.figure(figsize = (20,10), dpi =80)
plt.bar(x1,b_14,width=bar_width)
plt.bar(x2,b_15,width=bar_width)
plt.bar(x3,b_16,width=bar_width)
# 刻度
# 在中间那根柱子上定义
plt.xticks(x2,a)
plt.savefig("bar04.png")
plt.show()
真实数据演练:
import matplotlib.pyplot as plt
import pandas as pd
import os
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
os.chdir('E:\学习文档\data')
# 从excel读取数据
data = pd.read_excel('cust.xlsx',encoding = 'utf-8',usecols=[0,3,4,7])
# 统计各个业务子类型的交易金额
tran_data = data.groupby('业务子类型').sum()
x_data = tran_data.values
y_data = tran_data.index
x_data = x_data.flatten()
'''
plt.bar(*args, **kwargs)
bar(x, height, width,color, bottom,edge, *, align='center', **kwargs)
常用参数说明:
x:柱体在x轴上的坐标位置
height:柱体的高度
width:条形柱的宽度
color:条形柱的填充颜色
bottom:条形的起始位置
edgecolor:条形柱的边框颜色
linewidth:条形图边框宽度
tick_label:条形图的刻度标签
align:指定x轴上的对齐方式
'''
# 1、画布
plt.figure(figsize = (15,9),dpi = 80,facecolor = 'w')
# 2、绘画条形图
x = range(len(x_data))
plt.bar(x = x,height = x_data,width = 0.4,color=['c','r','g','m'],edgecolor='black',linewidth = 2,tick_label= y_data,alpha = 0.5)
# 3、设置x,y轴的标签
plt.xlabel('业务类型',labelpad = 20,fontsize = 10)
plt.ylabel('交易量',labelpad = 20,fontsize = 10)
# 4、设置图形标题
plt.title('各业务类型交易量',pad = 30,fontsize = 30)
# 修改刻度值文字大小
plt.xticks(fontsize = 20)
# 5、网格线
plt.grid(linestyle ='--',alpha = 0.4)
# 6、显示图片
plt.show()
# 1、画布
plt.figure(figsize = (15,9),dpi = 80)
# 2、绘画条形图
x = range(len(x_data))
plt.bar(x = x,height = x_data,width = 0.4,color=['c','r','g','m'],edgecolor='black',linewidth = 2,tick_label= y_data,alpha = 0.5)
# 3、设置x,y轴的标签
plt.xlabel('业务类型',labelpad = 20)
plt.ylabel('交易量',labelpad = 20)
# 4、设置图形标题
plt.title('各业务类型交易量',pad = 30,fontsize = 30)
# 5、网格线
plt.grid(linestyle ='--',alpha = 0.4)
# 6、显示图片
plt.show()
原始数据:
条形图: