柱状图又被称为柱形图、长条图、条状图或棒形图,是一种以长方形的长度为变量的统计图表。在现实应用中,经常使用柱状图来展示数据分析的结果,这样可以更加直观的展示数据分析结果。在本节的内容中,将详细讲解使用Python绘制柱状图的知识。
4.1 绘制基本的柱状图
在数据可视化分析工作中,经常需要绘制和数据统计相关的柱状图。在本节的内容中,将详细讲解在Python程序中使用各种库绘基本柱状图的知识。
4.1.1 绘制只有一个柱子的柱状图
在Python程序中,可以使用Matplotlib很容易地绘制一个柱状图。例如在线的实例文件bar01.py中,只需使用3行代码就可以绘制一个简单地柱状图。
源码路径:codes\4\4-1\bar01.py
import matplotlib.pyplot as plt plt.bar(x = 0,height = 1) plt.show()
在上述代码中,首先使用import导入了matplotlib.pyplot ,然后直接调用其bar()函数绘柱状图,最后用show()函数显示图像。其中在函数bar()中存在如下两个参数。
- left:柱形的左边缘的位置,如果指定为1,那么当前柱形的左边缘的x值就是1.0。
- height:这是柱形的高度,也就是y轴的值。
执行上述代码后会绘制一个柱状图,如图4-1所示。
图4-1 执行效果
4.1.2 绘制有两个柱子的柱状图
虽然通过上述代码绘制了一个柱状图,但是现实效果不够直观。在绘制函数bar()中,参数x和height除了可以使用单独的值(此时是一个柱形)外,还可以使用组来替换(此时代表多个矩形)。例如在下面的实例文件bar02.py中,演示了使用matplotlib绘制有两个柱子的柱状图的过程。
源码路径:codes\4\4-1\bar02.py
import matplotlib.pyplot as plt #导入模块 plt.bar(x = (0,1),height = (1,0.5)) #绘制两个柱形图 plt.show() #显示绘制的图
执行效果如图4-2所示。
图4-2 执行效果
在上述实例代码中,x = (0,1)的意思是总共有两个矩形,其中第一个的左边缘为0,第二个的左边缘为1。参数height的含义也是同理。当然,此时有的读者可能觉得这两个矩形“太宽”了,不够美观。此时可以通过指定函数bar()中的width参数来设置它们的宽度。请看下面的实例文件bar03.py,功能是设置柱子的宽度width为0.35。
源码路径:codes\4\4-1\bar03.py
import matplotlib.pyplot as plt plt.bar(x = (0,1),height = (1,0.5),width = 0.35) plt.show()
执行效果如图4-3所示
图4-3 设置柱状图宽度
4.1.3 设置柱状图的标签
这时可能有的读者会问:需要标明x和y轴的说明信息,比如使用x轴表示性别,使用y轴表示人数。例如在下面的实例文件bar04.py中,演示了使用库matplotlib绘制有说明信息柱状图的过程。
源码路径:codes\4\4-1\bar04.py
import matplotlib.pyplot as plt from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 mpl.rcParams['axes.unicode_minus'] = False #解决保存图像时负号'-'显示为方块的问题 plt.xlabel(u'性别') #x轴的说明信息 plt.ylabel(u'人数') #y轴的说明信息 plt.bar(x = (0,1),height = (1,0.5),width = 0.35) plt.show()
上述代码执行后的效果如图4-4所示。
图4-4 执行效果
接下来可以对x轴上的每个bar进行说明,例如设置第一个柱状图是“男”,第二个柱状图是“女”。此时可以通过如下实例文件bar05.py实现。
源码路径:codes\4\4-1\bar05.py
plt.xlabel(u'性别') plt.ylabel(u'人数') plt.xticks((0,1),(u'男',u'女')) plt.bar(x = (0,1),height = (1,0.5),width = 0.35) plt.show()
在上述代码中,函数plt.xticks()的用法和前面使用的x和height的用法差不多。如果你有几个bar,那么就对应几维的组,其中第一个参数表示文字的位置,第二个参数表示具体的文字说明。不过这里有个问题,例如有时我们指定的位置有些“偏移”,最理想的状态应该在每个矩形的中间。我们可以通过直接指定函数bar()里面的align="center"就可以让文字居中了。
plt.xlabel(u'性别') plt.ylabel(u'人数') plt.xticks((0,1),(u'男',u'女')) plt.bar(x = (0,1),height = (1,0.5),width = 0.35,align="center") plt.show()
此时的执行效果如图4-5所示。
图4-5 执行效果
接下来可以通过如下代码给柱状图表加入一个标题。
plt.xlabel(u'性别') plt.ylabel(u'人数') plt.title(u"性别比例分析") plt.xticks((0,1),(u'男',u'女')) rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center") plt.legend((rect,),(u"图例",)) plt.show()
在上述代码中用到了函数legend(),里面的参数必须是组。即使只有一个图例也必须是组,否则显示不正确。此时的执行效果如图4-6所示。
图4-6 执行效果
接下来还可以在每个矩形的上面标注对应的y值,此时需要使用如下通用的方法实现。
def autolabel(rects): for rect in rects: height = rect.get_height() plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height))
在上述实例代码中,其中plt.text有三个参数,分别是:x坐标,y坐标,要显示的文字。调用函数autolabel()的具体实现代码如下所示。
autolabel(rect)
为了避免绘制矩形柱状图紧靠着顶部,最好能够空出一段距离,此时可以通过函数bar()的属性参数yerr来设置。一旦设置了这个参数,那么对应的矩形上面就会有一个竖着的线。当把yerr这个值设置得很小的时候,上面的空白就自动空出来了。
rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center",yerr=0.0001)
到此为止,一个比较美观的柱状图绘制完毕,将代码整理并保存在如下实例文件bar06.py中,具体实现代码如下所示。
源码路径:codes\4\4-1\bar06.py
import matplotlib.pyplot as plt from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 mpl.rcParams['axes.unicode_minus'] = False #解决保存图像时负号'-'显示为方块的问题 def autolabel(rects): for rect in rects: height = rect.get_height() plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height)) plt.xlabel(u'性别') plt.ylabel(u'人数') plt.title(u"性别比例分析") plt.xticks((0,1),(u'男',u'女')) #绘制柱形图 rect = plt.bar(x = (0,1),height = (1,0.5),width = 0.35,align="center",yerr=0.0001) plt.legend((rect,),(u"图例",)) autolabel(rect) plt.show()
上述代码执行后的效果如图4-7所示。
图4-7 执行效果
4.1.4 设置柱状图的颜色
请看下面的实例文件bar06-1.py,功能是使用库matplotlib绘制绿颜色的柱状图。
源码路径:codes\4\4-1\bar06-1.py
import matplotlib.pyplot as plt data = [5, 20, 15, 25, 10] plt.bar(range(len(data)), data, fc='g') plt.show()
执行效果如图4-8所示。
图4-8 执行效果
请看下面的实例文件bar06-2.py,功能是使用库matplotlib绘制不同颜色的柱状图。
源码路径:codes\4\4-1\bar06-2.py
import matplotlib.pyplot as plt data = [5, 20, 15, 25, 10] plt.bar(range(len(data)), data, color='rgb') # or `color=['r', 'g', 'b']` plt.show()
执行效果如图4-9所示。
图4-9 执行效果
今天的文章 (4-1-1)绘制柱状图:绘制基本的柱状图(1)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/88176.html