(4-1-1)绘制柱状图:绘制基本的柱状图(1)

柱状图又被称为柱形图、长条图、条状图或棒形图,是一种以长方形的长度为变量的统计图表。在现实应用中,经常使用柱状图来展示数据分析的结果,这样可以更加直观的展示数据分析结果。在本节的内容中,将详细讲解使用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()中存在如下两个参数。

  1. left:柱形的左边缘的位置,如果指定为1,那么当前柱形的左边缘的x值就是1.0。
  2. 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  执行效果

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值