数据分析:数据可视化3(1)


上节课我们已经把折线图的具体细节都给大家介绍的差不多了,今天来学学其他的常见图像:

柱状图

基础概述

柱状图的特点是利用柱子的高度直观反应数据的差异,辨识效果好,例如,比较一年中各季度的销售额就可以用到柱状图。
绘制柱状图的方法为:

plt.bar(x,height,width,color)

其中,x是一个列表,传递图像中x轴上显示的标签的数量和位置;height记录每个柱形的高度;width设置柱形的宽度;color设置柱形的颜色,默认为蓝色。如果我们需要设置每个柱颜色不同,可以传递一个列表,比如:[‘blue’,‘green’,‘red’]。如果柱子的数量大于传递的颜色列表数量,多出的部分会从color列表中的0号元素开始重新取值:
知道了这些,我们就尝试画一幅柱状图:

import matplotlib.pyplot as plt
high = [1.5,0.6,7.8,6]
seek=plt.bar(range(len(high)),high,width=0.3,color=['r','green'])
plt.show()
# 查看plt.bar的返回值
print(seek)

在这里插入图片描述
在这里插入图片描述
可以看到seek内容为4个BarContainer类型的对象。那么我们继续来看看这四个内容及其类型都是什么:

for i in seek:
    print(i)
print(type(i))

在这里插入图片描述

这四个内容存储了每个柱的x,y轴坐标,宽度和高度以及旋转角度。需要注意的是,画出来的图实际上是三维图,x坐标指的是每个柱的最左端位置,而高度(height)实际上是z坐标,y则代表了每个柱的宽度。

为柱状图添加描述

下面我们做一个描述四个班男生数量的柱状图,要求为每个柱添加其代表的男生数量值,并添加图例。
在这个任务中,更改x轴标签,添加图例都和之前讲过的方式一样,下面我们讲讲怎么为柱添加高度数据。Matplot提供了一个方法:

plt.text(x,y,s,ha,va)

其中,x代表添加位置的x坐标,y代表要添加数据的高度。s代表标注的内容,ha和va分别设置水平和竖直方向的对齐方式。
需要注意一点,为柱添加标注需要逐一添加。下面我们举例讲解:

import matplotlib.pyplot as plt
man=[15,25,20,18]
female=[22,17,19,23]
rects=plt.bar(range(len(man)),man,width=0.2,label='boy',color='r')
plt.xticks(range(4),['class{}'.format(i+1) for i in range(4)]) # 修改x轴标签
plt.legend() # 添加图例
for rect in rects: # 为每个柱添加标注
    '''
    ret.get_x()方法可以获取rect中的x坐标
    ret.get_y()可以获取rect中的y坐标
    rect.get_height()可以获取rect中的height
    rect.get_width()可以获取rect中的width
    '''
    plt.text(rect.get_x()+rect.get_width()/2,rect.get_height()+0.1,rect.get_height(),ha='center')
plt.show()

在这里插入图片描述

堆叠柱状图

下面我们继续把女生数量也堆叠到图中,并且给大家介绍一种在plt.bar中设置x轴标签的方法。
把柱状图堆叠到一起也非常简单,只要使用两次plt.bar即可:

import matplotlib.pyplot as plt
man=[15,25,20,18]
female=[22,17,19,23]
# 男生柱
rects=plt.bar(range(len(man)),man,width=0.2,label='boy',color='r')
h1=[]
for rect in rects: # 为每个柱添加标注
    height=rect.get_height()
    h1.append(height) # 储存男生柱的高度,方便找到合适的位置添加第二个柱的高度数据
    plt.text(rect.get_x()+rect.get_width()/2,height/2,height,ha='center')

# 女生柱
rects=plt.bar(range(len(female)),female,bottom=man, # 设置女生柱堆叠到男生柱上方
              width=0.2,label='girl',
              # 添加x轴的标签,需要在最后一个plt.bar中添加:
              tick_label = ['class{}'.format(i+1) for i in range(4)],color='y')
i=0
for rect in rects:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2.0, h1[i]+(height/2.0), height, ha='center')
    i+=1
plt.legend() # 添加图例
plt.show()

看看结果:
在这里插入图片描述

并列柱状图

想要让图片显示成并列柱的形状,只要改变plt.bar()方法中的x值就可以其他与堆叠柱状图很像:

import matplotlib.pyplot as plt
man=[15,25,20,18]
female=[22,17,19,23]
# 男生柱
rects=plt.bar(range(len(man)),man,width=0.2,label='boy',color='r') # 画男生柱状图
for rect in rects: # 为每个柱添加标注
    height=rect.get_height()
    plt.text(rect.get_x()+rect.get_width()/2,height+0.1,height,ha='center')
width=rect.get_width()
# 女生柱
x1=[i+width for i in range(len(female))]
# 画女生柱状图:
rects=plt.bar(x1,female,width=width,label='girl',
              # 设置x轴的标签:
              tick_label = ['class{}'.format(i+1) for i in range(4)],color='y')
for rect in rects: # 为每个柱添加标注
    height = rect.get_height()
    plt.text(rect.get_x()+width/2,height+0.1, height, ha='center')
plt.legend() # 添加图例
plt.show()

在这里插入图片描述
如果对横坐标标签位置不满意,那就还用plt.xticks()方法进行调整;如果对图片大小不满意,也可以使用上节课讲过的plt.figure()方法进行调整。

条形柱状图

条形柱状图其实就是把一张柱状图旋转一下,对应的画图方法是plt.barh():

import matplotlib.pyplot as plt
high = [1.5,0.6,7.8,6]
plt.barh(range(len(high)),high,height=0.5,color=['r','green'])
plt.show()

在这里插入图片描述
bar()和barh()的设置方法非常相似,但是参数名有所不同,感兴趣的小伙伴可以自己试一下。
另外,设置x,y轴的轴标题以及图像的标题,一图层多画布的设置方法都和之前一样,感兴趣的小伙伴也可以自己尝试一下~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值