模块别忘了导入
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
熟能生巧,多试试。