绘制条形图

举个例子:

  • 任务:绘制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()

python draw函数 钢铁侠_python

  • 绘制横向的条形图
  • 横向的条形图注意事项:
  • 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()

python draw函数 钢铁侠_数据_02

  • 任务:
  • 已知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()

python draw函数 钢铁侠_python_03