绘制条形图
举个例子:
- 任务:绘制2017年电影票房前20的条形图。
- 数据:
- x = [“战狼2”,“速度与激情8”,“功夫瑜伽”,“西游伏妖篇”,“变形金刚5:最后的骑士”,“摔跤吧!爸爸”,“加勒比海盗5:死无对证”,“金刚:骷髅岛”,“极限特工:终极回归”,“生化危机6:终章”,“乘风破浪”,“神偷奶爸3”,“智取威虎山”,“大闹天竺”,“金刚狼3:殊死一战”,“蜘蛛侠:英雄归来”,“悟空传”,“银河护卫队2”,“情圣”,“新木乃伊”]
- y = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
- 1、x轴坐标为电影名称
- 2、y轴为票房(单位:亿)
- 3、设置图片大小和分辨率
- 4、设置x轴刻度、
- 5、添加x轴、y轴、title的标签
- 6、添加图例
- 7、设置网格
- 8、保存图片
- 绘制纵向的条形图
from matplotlib import pyplot as plt
import matplotlib
# 设置中文
matplotlib.rc('font',family='SimSun')
# 电影名称
# 对于长一点的字符串,可以采用\n换行
x = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:\n最后的骑士","摔跤吧!爸爸","加勒比海盗5:\n死无对证","金刚:骷髅岛","极限特工:\n终极回归","生化危机6:\n终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:\n殊死一战","蜘蛛侠:\n英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]
# 票房(单位 亿)
y = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
# 设置图表大小
plt.figure(figsize=(20,8),dpi=80)
# 设置x轴刻度
_x = range(len(x))
_x_labels = x
plt.xticks(_x,_x_labels,rotation=45)
# 设置x轴label
plt.xlabel("电影")
# 设置y轴label
plt.ylabel("票房 单位:亿")
# 设置标题title
plt.title("2017年票房前20的条形图")
# 绘制条形图,width:0-1
plt.bar(x,y,width=0.5,color="orange",label="2017年票房")
# 设置图例
plt.legend(loc="upper right")
# 设置网格
plt.grid(alpha=0.3)
# 保存图表
plt.savefig("./box-office.svg")
# 显示图表
plt.show()
- 绘制横向的条形图
- 横向的条形图注意事项:
- x轴和y轴需要调换顺序
- x轴和y轴的ticks需要调换顺序
- plt.barh 里面宽度需要由height 设置,原本x和y的位置也需要调换
from matplotlib import pyplot as plt
import matplotlib
# 设置中文
matplotlib.rc('font',family='SimSun')
# 电影名称
y = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]
# 票房(单位 亿)
x = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
# 设置图表大小
plt.figure(figsize=(20,8),dpi=80)
# 设置y轴刻度
_y = range(len(y))
_y_labels = y
plt.yticks(_y,_y_labels,rotation=0)
# 设置x轴label
plt.xlabel("票房 单位:亿")
# 设置y轴label
plt.ylabel("电影")
# 设置标题title
plt.title("2017年票房前20的条形图")
# 绘制条形图,height:0-1
plt.barh(y,x,height=0.5,color="orange",label="2017年票房")
# 设置图例
plt.legend(loc="upper right")
# 设置网格
plt.grid(alpha=0.3)
# 保存图表
plt.savefig("./box-office.svg")
# 显示图表
plt.show()
- 任务:
- 已知2017-09-14、2017-09-15、2017-09-16三天的票房,通过条形图进行对比显示
- 数据:
- y_14 = [2358,399,2358,362]
- y_15 = [12357,156,2045,168]
- y_16 = [15746,312,4497,319]
- x = [“猩球崛起3:终极之战”,“敦刻尔克”,“蜘蛛侠:英雄归来”,“战狼2”]
- 代码如下:
from matplotlib import pyplot as plt
import matplotlib
# 设置中文
matplotlib.rc('font',family='SimSun')
# 2017-09-14 票房数据
y_14 = [2358,399,2358,362]
# 2017-09-15 票房数据
y_15 = [12357,156,2045,168]
# 2017-09-16 票房数据
y_16 = [15746,312,4497,319]
# 电影名称
x = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
# 设置图表大小
plt.figure(figsize=(20,8),dpi=80)
bar_width = 0.3 # 条形图的宽度
# 设置每个条形图的x轴数据
x_14 = list(range(len(x))) # [0, 1, 2, 3]
x_15 = [i+ bar_width for i in x_14] # [0.3, 1.3, 2.3, 3.3]
x_16 = [i+ bar_width * 2 for i in x_14] # [0.6, 1.6, 2.6, 3.6]
# 设置x轴的刻度
plt.xticks(x_15,x) # 以中心条形图x_15的x轴数据,可以使电影名称居中
# 绘制 2017-09-14 票房数据 条形图
plt.bar(x_14,y_14,width=0.3,label="2017-09-14票房数据")
# 绘制 2017-09-15 票房数据 条形图
plt.bar(x_15,y_15,width=0.3,label="2017-09-15票房数据")
# 绘制 2017-09-16 票房数据 条形图
plt.bar(x_16,y_16,width=0.3,label="2017-09-16票房数据")
# 设置图例
plt.legend(loc="upper right")
# 设置x轴label
plt.xlabel("电影")
# 设置y轴label
plt.ylabel("票房")
# 设置标题title
plt.title("2017年9月14-16号电影票房数据对比条形图")
# 设置网格
plt.grid(alpha=0.3)
# 保存图表
plt.savefig("./1.svg")
# 显示条形图
plt.show()