python绘制条形柱状图,python画横向柱状图

  python绘制条形柱状图,python画横向柱状图

  本文主要详细介绍了用python绘制水平和垂直条形图的方法。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  条形图是一种用相同宽度的条形的高度或长度来表示数据量的图形。用来画离散数据,可以一目了然的看到每个数据的大小,比较数据之间的差异。

  简单条形图的绘制方法一般与折线图相同,只需要将拟合方法plt.plot()改为plt.bar()。比如如何可视化分析2017年内地电影票房前20的电影和电影票房数据?毫无疑问,是条形图分析。

  像往常一样,代码:

  #编码=utf-8

  从matplotlib导入pyplot作为plt

  从matplotlib导入font_manager

  my_font=font_manager。font properties(fname= c : \ Windows \ Fonts \ MSYHL。TTC’)

  A=[战狼2 ,速度与激情8 ,功夫瑜伽,西游降魔篇,变形金刚5:最后的骑士,摔跤吧,爸爸,

  《加勒比海盗5:》、《孔:骷髅岛》、《极限特工:终极回归》、《生化危机6:终章》、《乘风破浪》、

  神偷奶爸3,智取虎山,大闹天竺,金刚狼3:战斗到死,蜘蛛侠:英雄归来,悟空传,银河护卫队2,

  情人,新妈咪]

  b=[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]

  #设置图像尺寸

  图形尺寸=(20,15),dpi=80

  #画一个条形图

  plt.bar(range(len(a)),b,width=1)

  #将字符串设置为x轴

  plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=90)

  #显示图形

  plt.show()

  结果如下:

  从程序分析:可以看出,绘制方法与折线图、散点图大体一致,只是拟合方法改为plt.bar(),其余大体一致。但是需要注意的是,在这个散点图中,每个条形的宽度不能超过1,否则会有走样!

  大家可以看到,这部电影的名字在底部并不好看,对做数据分析的人也不友好,所以有必要把上面的竖条图改成横条图。具体方法很简单,只需将竖条图的plt.bar()改为plt.barh()。完整的代码如下:

  #编码=utf-8

  从matplotlib导入pyplot作为plt

  从matplotlib导入font_manager

  my_font=font_manager。font properties(fname= c : \ Windows \ Fonts \ MSYHL。TTC’)

  A=[战狼2 ,速度与激情8 ,功夫瑜伽,西游降魔篇,变形金刚5:最后的骑士,摔跤吧,爸爸,

  《加勒比海盗5:》、《孔:骷髅岛》、《极限特工:终极回归》、《生化危机6:终章》、《乘风破浪》、

  神偷奶爸3,智取虎山,大闹天竺,金刚狼3:战斗到死,蜘蛛侠:英雄归来,悟空传,银河护卫队2,

  情人,新妈咪]

  b=[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)

  #画一个条形图

  Plt。Barh (range (len (a)),b,height=0.3,color= orange) # width不能用于不同于竖条的条形图。

  #将字符串设置为x轴

  plt.yticks(range(len(a)),a,fontproperties=my_font)

  plt.grid(alpha=0.3)

  #保存图片

  plt.savefig(。/movie . png’)

  #显示图形

  plt.show()

  运行结果如下:

  /p>

  可以看得出,横条形图在这里效果比竖条形图效果好,更容易观测与分析。使用时需要根据实际情况进行斟酌,合理选取。

  那么问题又来了,如果我们知道了四部电影:猩球崛起3:终极之战、敦煌尔克、蜘蛛侠:英雄归来、战狼2在三天之内的票房数目,想知道电影本身在这三天自己的票房变化,怎么来绘制条形图呢?

  先上代码:

  

from matplotlib import pyplot as plt

  from matplotlib import font_manager

  my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\MSYHL.TTC")

  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 # 乘以3小于1

  # 设置相邻的宽度

  x_14 =list(range(len(a)))

  x_15 = [i+bar_width for i in x_14]

  x_16 = [i+bar_width*2 for i in x_14]

  # 设置图像大小

  plt.figure(figsize=(20,8),dpi=80)

  # 设置X轴

  plt.xticks(x_15,a,fontproperties=my_font)

  # 绘制图像 设置条形图宽度

  plt.bar(range(len(a)), b_14, width=bar_width, label=9月14日)

  plt.bar(x_15, b_15, width=bar_width, label=9月15日)

  plt.bar(x_16, b_16, width=bar_width, label=9月16日)

  # 设置图例

  plt.legend(prop=my_font)

  # 显示图像

  plt.show()

  运行结果如下:

  

  程序分析:可以看出来,上图很好的完成了题目的要求。猩球崛起3:终极之战的三日票房最高,同时三日票房总数呈现上升趋势;敦刻尔克与战狼2的电影票房总体都比较低;蜘蛛侠:英雄归来的票房虽然不多,但有上升趋势,票房数目中等。那么是怎么进行操作的呢?相当于在一幅图中绘制三个直方图,也就是四个电影在三天的票房数目。通过将宽度设置,实现三个直方图的无缝连接,使得形成一部电影在三天的票房数目的对比效果。即第一个条形图开始,第二个条形图起始点加上一个条形图的宽度,第三个条形图加上两个条形图的宽度,然后形成三个直方图的刚好契合。需要注意的是:这个每个直方图的宽度不能超过1/3,也就是三个重叠在一起宽度不能超过1,否则会形成条形图混叠。如下图:

  

  总结:条形图绘制的要点就是使用plt.bar()或者plt.barh(),一定要注意条形图宽度的设置,不能超过1,否则会混叠,影响效果,达不到目标要求。

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: