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 pltfrom 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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。