第二十三篇,数据分析之数据可视化之统计图

模块别忘了导入

import matplotlib.pylab as plt
import numpy as np
import pandas as pd

柱形图

通过一个案例来了解柱形图:

a = [1,2,3,4,5]
b = [2,4,6,8,10]
plt.bar(left=a,height=b)
plt.show()

运行结果:

    plt.bar(left=a,height=b)
TypeError: bar() missing 1 required positional argument: 'x'

哦吼咋报错了,让我们看看报错的信息,好像是缺少一个x参数,在看看帮助文档:

bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

这个应该是版本的变更导致的,所以这个里面应该传一个x与height的位置参数,width为柱子的宽度默认是(0.8),bottom为柱子底部与x轴的距离默认为None:

a = [1,2,3,4,5]
b = [2,4,6,8,10]
plt.bar(x=a,height=b)
plt.show()

在这里插入图片描述这里的话可以根据以上代码来进行分析,x的话传递的参数就是x轴的名称,height就是y轴的名称,宽度默认0.8
修改一下里面的参数看看:

a = [1,2,3,4,5]
b = [2,4,6,8,10]
plt.bar(x=a,height=b,width=0.5,bottom=[1,2,3,4,5])
plt.show()

在这里插入图片描述那有没有啥办法能换个好看的柱子,当然有:

a = [1,2,3,4,5]
b = [2,4,6,8,10]
plt.bar(x=a,height=b,width=0.5,bottom=[1,2,3,4,5],color='black',edgecolor='r',linestyle='--',linewidth=3,hatch='x')
plt.show()

在这里插入图片描述好丑啊,自己没做好,读者可以自己试着做一下,然后里面的那些参数都可以查看帮助文档,比如color就是柱子的颜色可以使用纯色的缩写:r,b,y或者英文等,edgecolor表示柱子边缘的颜色,linestyle表示柱子边线的线型,hatch表示填充柱子内部的图形等。
当然这个只是基操,且看下面代码:

a = range(1,6)
b = np.random.random(5)
c = np.random.random(5)
plt.bar(a,b,label='b',color='b')
plt.bar(a,c,bottom=b,label='c',color='y')

运行结果:
在这里插入图片描述这种就叫堆积图,通过获取随机数来进行堆积,如果第二个不用bottom的话就会导致重合后面那个颜色会覆盖在之前那个颜色上面,可以自行尝试一下。
还有种簇状柱形图:

a = np.arange(1,6)
b = np.random.random(5)
c = np.random.random(5)
width = 0.4
a = a - 0.2
plt.bar(a,b,width=width,label='b',color='b')
plt.bar(a+width,c,width=width,label='c',color='y')
plt.legend()

在这里插入图片描述上述代码分析一下,因为默认是0.8宽度,既然我们要让它们每根柱子为0.4的宽度,a这个柱子再减0.2的距离,这样它就占据左边0.4的位置,而b这个柱子就要加上0.4的距离,a+width的意思是因为它们柱子之间距离为0,所以要给它们一个中心线的位置,比如就会覆盖掉,plt.legend意思就不多讲,图列嘛,这里不懂可以参考以前的博客。

条形图

竖着的叫柱状图,那横着的就是条形图了。

a = np.arange(1,6)
b = np.random.random(5)
plt.barh(a,b)
plt.show()

在这里插入图片描述观察上面代码可以看出来,绘制条形图使用的函数是barh(),通过单词可以看出来,条线图是通过柱形图转为水平而来的,所以,里的参数也就随之顺时针转90°了,里面的使用方法与与plt.bar()方法类似,可以自己尝试一下。
下面有一种正负条形图,可以用来比较对象:

a = np.arange(1,6)
b = np.random.random(5)
c = np.random.random(5)
plt.barh(a,b,color='b')
plt.barh(a,-c,color='y')

在这里插入图片描述通过颜色的分布就不难理解代码的意思,黄色的这个条线图是-c了的,所以是负的,仔细领会。

箱形图

“盒式图"或叫"盒须图”"箱形图"boxplot(也称箱须图(Box-whiskerPlot)须图又称为箱形图,其绘制须使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同的母体数据时更可表现其差异。
主要包含六个数据节点,将一组数据从大到小排列,分别计算出他的上边缘,上四分位数Q3,中位数,下四分位数Q1,下边缘,还有一个异常值。
在这里插入图片描述
上图观察可以得到
最小值(minimum)=5
下四分位数(Q1)=7
中位数(Med–也就是Q2)=8.5
上四分位数(Q3)=9
最大值(maximum)=10
平均值=8
四分位间距(interquartile range)={\displaystyle Q3-Q1}=2 (即ΔQ)

下面通过一个案例来了解:

fig,ax = plt.subplots(1,2)
data = [1,6,2,8,3]
ax[0].boxplot([data])
ax[0].grid(True)
ax[1].boxplot([data],showmeans=True)
ax[1].grid(True)

在这里插入图片描述先看看第一个箱型图,最小值为1,最大值为8,因为data里面是一个列表按顺序来的话3是中位数,所以图上就用橙色标记出来了,然后其他几个数都分别在画布上标记出来了,2表示的是下四分位数,6表示的是上四分位数,然后第二个箱型图里面就比第一个箱线图多了一个showmeans=True参数可以将平均值显示出来。上面使用Axes对象的boxplot()方法绘制箱线图,那我们使用plt.boxplot()绘制:

a = [1,6,2,8,3]
plt.boxplot(a)
plt.grid(True)
plt.show()

也可以查看plt.boxplot的帮助文档:

boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, *, data=None)

在这里插入图片描述当然pandas的数据对象也有boxplot()方法(模块别忘了导入):

np.random.seed(12345)
data = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D'])
bp = data.boxplot(sym='r*',vert=False,meanline=False,showmeans=True)
plt.show()    

在这里插入图片描述分析一下pd.boxplot里面的参数,其中起到作用的是vert=False,如果等于True,则表示竖直方向(默认就是竖直方向),sym=‘r*’,表示异常点的形状,meanline=False,表示平均值的形状不能为线性,因为中位数常常用于线段表示,这样做可以避免两者被混淆。

饼图

饼图显示一个数据系列中各项的大小与各项总和的比例。
在Matplotlib中使用是的pie()方法绘制饼图,可以查看帮助文档:

pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None)

通过一个案例了解一下饼图:

a = [1,2,3,4]
fig,ax = plt.subplots()
labels = ['A','B','C','D']
colors = ['r','b','y','g']
explode = (0,0,0,0.1)
ax.pie(a,labels=labels,colors=colors,explode=explode,autopct='%1.1f%%',shadow=True,startangle=90,radius=1.2)
ax.set(aspect='equal',title='Pie')

在这里插入图片描述
先运行一下,通过上面运行的结果来分析一下plt.pie参数:
a,表示数据源,就是一个列表
labels,设置每个扇面的标示
colors,老员工了,当然是扇面颜色了
explode,标识每个扇面之间的偏距,上面参数里面有个0.1表示跟第四个扇面的距离,0就是表示没有距离
autopct, 按照规定的格式显示每个扇面的百分比
shadow, True表示没有阴影,False表示有阴影
startangel, 表示从第一个扇形是从90°开始,默认是逆时针旋转
radius,表示半径大小,上面表示1.2

熟能生巧,多试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值