数据可视化—使用matplotlib绘制常用类型图表
数据可视化—使用matplotlib绘制常用类型图表
1.折线图的绘制——plot()
语法如下:
matplotlib.pyplot.plot(x,y,format_string,**kwargs)
参数说明:
- x:x轴数据
- y:y轴数据
- format_string:控制曲线格式的字符串,包括颜色、线条样式和标记样式
- ** kwargs:键值参数,相当于一个字典,比如,输入参数为:(1,2,3,4,k,a=1,b=2,c=3),args =(1,2,3,4,k),*kwargs={‘a’:1,’b’:2,’c’:3}.
import pandas as pd
import matplotlib.pyplot as plt
#读取本地excel文件,转化为DataFrame对象
df = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/12/data.xls')
#多折线图,x轴和多y轴定义
x = df['姓名']
y1 = df['语文']
y2 = df['数学']
y3 = df['英语']
#设置中文字体,防止乱码
plt.rcParams['font.sans-serif'] = ['SimHei','KaiTi','FangSong','PingFang']
#设置坐标轴的刻度线向内向外显示
plt.rcParams['xtick.direction'] = 'out'
plt.rcParams['ytick.direction'] = 'in'
#设置画布大小、分辨率和背景颜色
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
#设置图标标题
plt.title('语数外成绩大比拼',fontsize=10)
#绘制三条折线图
plt.plot(x,y1,label='语文',color='r',marker='p',)
plt.plot(x,y2,label='数学',color='g',linestyle=':',marker='.',mfc='r',ms=8,alpha=0.7)
plt.plot(x,y3,label='英语',color='b',linestyle='-.',marker='*')
plt.grid(axis='y') #y轴网格线显示
plt.ylabel('分数',fontsize=8) #设置Y轴标签
plt.yticks(range(70,150,10),fontsize=6) #y轴的刻度范围设置
plt.xticks(fontsize=7) #设置x轴的字体大小
plt.legend(['语文','数学','英语'],fontsize=6) #设置图标图例
plt.show()
2. 柱状图的绘制——bar()
语法如下:
matplotlib.pyplot.bar(x,height,width,bottom=None,*,align='center',data=None,** kwargs)
参数说明
- x: x轴数据
- height:柱子的高度,也就是y轴数据
- width: 浮点型,柱子的宽度,默认值为0.8,可以指定固定值
- bottom:标量或数组,可选参数,柱形图的y坐标,默认值为None
- *:星号本身不是参数,星号表示其后面的参数为命名关键字参数,命名关键字参数必须传入参数名,否则程序会出现错误
- align:对齐方式,如center是居中对齐,edge是边缘对齐,默认值为center
- data: data关键字参数。如果给定一个数据参数,所有位置和关键字参数将被替换
- ** kwargs: 关键字参数,其他可选参数,如color(颜色),alpha(透明度),label(每个柱子显示的标签)等
2.1基本柱状图的绘制
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/14/books.xlsx',sheet_name='Sheet1')
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置画布大小、分辨率和背景颜色
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
#设置x轴和y轴数据
x = df['年份']
height = df['销售额']
plt.grid(axis='y',which='major',color='gray',linestyle='-.',linewidth=0.5,alpha=0.3) #设置y轴的网格线样式
#设置X轴也Y轴以及图标标题
plt.xlabel('年份',fontsize=8)
plt.ylabel('线上销售额(百万)',fontsize=8)
plt.title('2013-2019年线上图书销售额分析图',fontsize=10)
plt.bar(x,height,width=0.5,align='center',color='b',alpha=0.5) #绘制柱形图
#为每个柱子标注数据
for a,b in zip(x,height):
plt.text(a,b,format(b,','),ha='center',va='bottom',fontsize=7,color='r',alpha=0.9)
plt.xticks(fontsize=6)
plt.yticks(range(110000,2300000,400000),fontsize=6) #设置y轴刻度
plt.legend(['销售额'],fontsize=8) #设置图标图例
plt.show()
2.2多柱形图的绘制
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/14/books.xlsx',sheet_name='Sheet2')
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置画布大小、分辨率和背景颜色
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
#设置x轴和y轴数据
x = df['年份']
y1 = df['京东']
y2 = df['天猫']
y3 = df['自营']
width =0.25
plt.grid(axis='y',which='major',color='gray',linestyle='-.',linewidth=0.5,alpha=0.3) #设置y轴的网格线样式
#设置X轴也Y轴以及图标标题
plt.xlabel('年份信息',fontsize=8)
plt.ylabel('线上销售额(百万)',fontsize=8)
plt.title('2013-2019年线上图书销售额分析图',fontsize=10)
plt.bar(x,y1,width = width,color='darkorange') #绘制京东销售额柱形图
plt.bar(x+width,y2,width=width,color='deepskyblue') #绘制天猫销售额柱形图
plt.bar(x+2*width,y3,width=width,color='g') #绘制自营销售额柱形图
#为每个柱子标注数据
for a,b in zip(x,y1):
plt.text(a,b,format(b,','),ha='center',va='bottom',fontsize=4,color='r',alpha=0.9)
for a,b in zip(x,y2):
plt.text(a+width,b,format(b,','),ha='center',va='bottom',fontsize=4,color='g',alpha=0.9)
for a,b in zip(x,y3):
plt.text(a+2*width,b,format(b,','),ha='center',va='bottom',fontsize=4,color='black',alpha=0.9)
plt.xticks(fontsize=8)
plt.yticks(range(100000,1600000,300000),fontsize=8) #设置y轴刻度
plt.legend(['京东','天猫','自营'],fontsize=6) #设置图标图例
plt.show()
3. 直方图的绘制
语法如下:
matplotlib.pyplot.hist(x,bins=None,range=None,density=None,bottom=None,histtype='bar',
align='mid',log=False,color=None,label=None,stacked=False,normed=None)
参数解释
- x:数据集
- bins:统计数据的区间分布
- range: 元组类型,显示的区间
- density: 布尔型,显示频率统计结果,默认值为None。设置为False不显示频率统计结果,设置为True则显示频率统计结果。频率统计结果=区间数目/(总数x区间宽度)。
- histtype: 可选参数,设置为bar,barstacked,step或sepfilled,默认值为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar参数类似
- align: 可选参数,值为left,mid或right,默认值为mid,控制柱状图的水平分布,left或者right会有部分的空白区域,推荐使用默认值
- log:布尔型,默认值为False,即y坐标轴是选择指数刻度
- stacked: 布尔型,默认为False,是否为堆积状图
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/17/grade1.xls')
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置画布大小、分辨率和背景颜色
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
plt.grid(axis='y',which='major',color='gray',linestyle='-.',linewidth=0.5,alpha=0.3) #设置y轴的网格线样式
x = df['得分']
bins = [0,25,50,75,100,125,150]
plt.xlabel('分数',fontsize=8)
plt.ylabel('学生数量',fontsize=8)
plt.title('高一数学成绩分布直方图',fontsize=10)
plt.hist(x,bins=bins,facecolor='yellow',edgecolor='black',alpha=0.7)
plt.show()
4饼图的绘制——pie()
语法如下:
matplotlib.pyplot.pie(x,explode=None,labels=None,colors=None,autopct=None,
pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,raduis=None,
counterclock=True,wedgeprops=No,textprops=None,center=(0,0),frame=False,rotatelabels=False,hold=None,data=None)
参数解释
- x: 每一块饼形图的比例,如果sum(x)>1会使用sum(x)经行归一化
- labels: 每一块饼形图外侧显示的说明文字
- explode: 每一块饼形图离中心的距离
- startangle: 起始绘制角度,默认是从x轴正方向逆时针画起,如设置值为90,则从y轴正方向画起
- shadow:在饼形图下面画一个阴影,默认是为False,即不画阴影。
- labeldistance: 标记的绘制位置,相对于半径的比例,默认值为1.1,如小于1,则绘制在饼图内侧。
- autopct:设置饼图百分比,可以使用格式化字符串或format函数,如’%1.1f’保留小数后一位。
- pctdistance:类似于labeldistance参数,指定百分比的位置刻度,默认值为0.6
- radius: 饼图半径,默认为1
- countclock: 指定指针方向 ,布尔型,可选参数,默认值为True,表示逆时针,如果值为False,则表示顺时针
- wedgeprops: 字典类型,可选参数,默认值为None。字典传递给wedge对象用来画一个饼图,例如wedgeprops={‘linewidth’:2}设置wedge线宽为2
- textprops: 设置标签的比例文字的格式,字典类型,可选参数,默认值为None。传递给text对象的字典参数。
- center:浮点类型的列表,可选参数,默认值为(0,0),表示图表中心位置。
- frame: 布尔型,可选参数,默认值为False,不显示轴框架(也就是网络);如果值为True,则显示轴框架,与grid函数配合使用。在实际应用中建议使用默认设置,因为显示轴框架会干扰饼形图效果
- ratatelabels: 布尔型,可选参数,默认值为False;如果值为True,则旋转到每个标签到指定的角度
4.1 简单饼形图的绘制
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
x = [2,5,12,70,2,9]
plt.pie(x,autopct='%1.1f%%')
plt.show()
4.2 基础饼形图的绘制
# -- coding: utf8 --
import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/19/data2.xls')
#设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置画布大小,分辨率,背景颜色
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
#定义数据
labels = df1['省']
sizes = df1['销量']
#设置饼形图每块的颜色
colors = ['red','yellow','slateblue','green','magenta','cyan','darkorange','lawngreen','pink','gold']
plt.pie(sizes,
labels=labels,
colors=colors,
#explode = (0.1,0.02,0.03,0.01,0,0,0.05,0,0,0.1), #设置分裂出来的块与中心的距离
labeldistance = 1.06,
autopct = '%.1f%%',
startangle = 90,
radius = 0.5,
center = (0.2,0.2),
textprops ={'fontsize':6,'color':'black'},
pctdistance = 0.6)
#设置x,y轴刻度一致,保证饼图为圆形
plt.axis('equal')
#设置图表标题
plt.title('2020年1月份各省销量占比情况分析',fontsize=8)
plt.show()
4.3分裂饼形图
# -- coding: utf8 --
import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/19/data2.xls')
#设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置画布大小,分辨率,背景颜色
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
#定义数据
labels = df1['省']
sizes = df1['销量']
#设置饼形图每块的颜色
colors = ['red','yellow','slateblue','green','magenta','cyan','darkorange','lawngreen','pink','gold']
plt.pie(sizes,
labels=labels,
colors=colors,
explode = (0.1,0.02,0.03,0.01,0,0,0.05,0,0,0.1), #设置分裂出来的块与中心的距离
labeldistance = 1.06,
autopct = '%.1f%%',
startangle = 90,
radius = 0.5,
center = (0.2,0.2),
textprops ={'fontsize':6,'color':'black'},
pctdistance = 0.6)
#设置x,y轴刻度一致,保证饼图为圆形
plt.axis('equal')
#设置图表标题
plt.title('2020年1月份各省销量占比情况分析',fontsize=8)
plt.show()
4.3 环形图
# -- coding: utf8 --
import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/19/data2.xls')
#设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置画布大小,分辨率,背景颜色
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
#定义数据
labels = df1['省']
sizes = df1['销量']
#设置饼形图每块的颜色
colors = ['red','yellow','slateblue','green','magenta','cyan','darkorange','lawngreen','pink','gold']
plt.pie(sizes,
labels=labels,
colors=colors,
explode = (0.1,0.02,0.03,0.01,0,0,0.05,0,0,0.1), #设置分裂出来的块与中心的距离
labeldistance = 1.06,
autopct = '%.1f%%',
startangle = 90,
wedgeprops = {'width':0.16,'edgecolor':'k'},
radius = 0.5,
center = (0.2,0.2),
textprops ={'fontsize':6,'color':'black'},
pctdistance = 0.85)
#设置x,y轴刻度一致,保证饼图为圆形
plt.axis('equal')
#设置图表标题
plt.title('2020年1月份各省销量占比情况分析',fontsize=8)
plt.show()
4.4 内嵌环形图
5. 散点图的绘制
语法如下
matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,
vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,edgecolor=None,data=None, ** kwargs)
参数解释
- x,y:数据
- s:标记大小,以平方磅为单位的标记面积,设置值如下:
- 数值标量:以相同的大小绘制所有标记
- 行或列向量:使每个标记具有不同的大小,x,y和sz中的相应元素确定每个标记的位置和面积,sz的长度必须等于x和y的长度。
- [] 使用36平方磅的默认面积
- c: 标记颜色,可选参数,默认为蓝色
- marker:标记样式,可选参数,默认值为’o’.
- cmap: 颜色地图,可选参数
- norm:可选参数
- vmin,vmax: 标量,可选
- alpha:透明度,可选参数,0~1之间的数,表示透明度
- linewidths: 线宽,标记边缘的宽度,可选参数
- verts: (x,y)的序列,可选参数,如果参数marker为None,这些顶点将用于构建标记,标记的中心位于在(0,0)为标准化单位,整体标记重新调整由参数s完成
- edgecolors: 轮廓颜色,和参数c类似,可选参数,默认值为None
- data: data关键字参数,如果给定一个数据参数,所有的位置和关键字参数将被替换
- **kwargs: 关键字参数,其他可选参数
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
aa = r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/24/JDdata.xls'
bb = r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/24/JDcar.xls'
dfaa = pd.DataFrame(pd.read_excel(aa))
dfbb=pd.DataFrame(pd.read_excel(bb))
df1=dfaa[['业务日期','金额']]
df2=dfbb[['投放日期','支出']]
#去除空日期和金额为0的记录
df1=df1[df1['业务日期'].notnull() & df1['金额'] !=0]
df2=df2[df2['投放日期'].notnull() & df2['支出'] !=0]
df1['业务日期'] = pd.to_datetime(df1['业务日期'])
df2['投放日期'] = pd.to_datetime(df2['投放日期'])
dfData = df1.set_index('业务日期',drop=True)
dfCar=df2.set_index('投放日期',drop=True)
# 按月度统计并显示销售金额
dfData_month=dfData.resample('M').sum().to_period('M')
# 按月度统计并显示广告费支出金额
dfCar_month=dfCar.resample('M').sum().to_period('M')
#x为广告费用,y为销售收入
x=pd.DataFrame(dfCar_month['支出'])
y=pd.DataFrame(dfData_month['金额'])
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.title('销售收入与广告费散点图',fontsize=10) #图表标题
plt.scatter(x, y, color='r') #真实值散点图
plt.show()
6. 面积图的绘制
语法如下
matplotlib.pyplot.stackplt(x,*args,data=None,**kwargs)
参数解释
- x:x轴的数据
- args: 当传入的参数个数未知时,使用 args,这里指y轴数据中可以传入多个y轴;
- data: data关键字参数,如果给定一个数据参数,所有位置和关键字参数将被替代
- **kwargs: 关键字参数,其他可选参数,如颜色color,透明度alpha等
6.1 简单面积图的绘制
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
x = [1,2,3,4,5]
y1 = [6,9,5,8,4]
y2 = [3,2,5,4,3]
y3 = [8,7,8,4,3]
y4 = [7,4,6,7,12]
plt.title('简单面积图的绘制结果',fontsize=10) #图表标题
plt.stackplot(x,y1,y2,y3,y4,colors=['r','g','b','c'])
plt.legend(['x','y1','y2','y3','y4'],fontsize=6)
plt.show()
6.2 标准面积图的绘制
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
df = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/26/books.xlsx')
plt.rcParams['font.sans-serif'] = ['SimHei']
x = df['年份']
y = df['销售额']
plt.title('2013-2019年线上图书销售情况',fontsize=10)
plt.xlabel('销售年份',fontsize=8)
plt.ylabel('销售额(百万元)',fontsize=8)
plt.xticks(fontsize=7)
plt.yticks(fontsize=7)
plt.stackplot(x,y)
plt.show()
6.3 堆叠面积图
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
df = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/26/books.xlsx',sheet_name='Sheet2')
plt.rcParams['font.sans-serif'] = ['SimHei']
x = df['年份']
y1 = df['京东']
y2 = df['天猫']
y3 = df['自营']
plt.title('2013-2019年线上图书销售情况',fontsize=10)
plt.xlabel('销售年份',fontsize=8)
plt.ylabel('销售额/百万',fontsize=8)
plt.xticks(fontsize=7)
plt.yticks(fontsize=7)
plt.stackplot(x,y1,y2,y3,colors=['red','yellow','skyblue'])
plt.ylim(100000,1600000,400000)
plt.legend(['京东','天猫','自营'],loc='upper left',fontsize=6)
plt.show()
7. 热力图的绘制
语法如下
matplotlib.pyplot.imshow(x)
7.1 简单热力图的绘制
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
x = [[1,2],[3,4],[5,6],[7,8],[9,10]]
plt.imshow(x)
plt.show()
7.2 使用本地数据绘制热力图
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=300,facecolor='white')
df = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/29/data1.xls',sheet_name='高二一班')
plt.rcParams['font.sans-serif'] = ['SimHei']
X = df.loc[:,'语文':'生物'].values
name = df['姓名']
plt.imshow(X)
plt.xticks(range(0,6,1),['语文','数学','英语','物理','化学','生物'],fontsize=6)
plt.yticks(range(0,12,1),name,fontsize=6)
plt.colorbar()
plt.title('学生成绩统计热力图',fontsize=8)
plt.show()
8.箱型图的绘制-boxplot()
语法如下
matplotlib.pyplot.boxplot(x,notch=None,sym=None,vert=None,whis=None,
positions=None,widths=None,patch_artist=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)
参数解释
- x:指定要绘制箱型图的数据
- notch:是否以凹口的形式展现箱型图,默认非凹口
- sym: 指定异常点的形状,默认为加号(+)显示
- vert: 是否需要将箱型图垂直摆放,默认垂直摆放
- whis: 指定上下限与上下四分位的距离,默认为1.5倍的四分位差
- positions: 指定箱型图的位置,默认为 [0,1,2,3…]
- widths: 指定箱型图的宽度,默认为0.5
- patch_artist: 是否填充箱体的颜色
- meanline: 是否用线的形式表示平均值,默认用点来表示
- showmeans: 是否显示均值,默认不显示
- showcaps: 是否显示箱型图的顶端和末端的两条线,默认显示
- showbox: 是否显示箱型图的箱体,默认显示
- showfliers:是否显示异常值,默认显示
- boxprops:设置箱体的属性,如边框颜色、填充色
- labels: 为箱型图添加标签,类似于图例的作用
- flierprops: 设置异常值的属性,如异常点的形状,大小,填充色等
- medianprops:设置中位数的属性,如线的类型,粗细等
- meanprops:设置均值的属性,如点的大小,颜色等
- capprops: 设置箱型图的顶端和末端线的属性,如颜色和粗细等
- whiskerprops: 设置必须的属性,如颜色,粗细和线的类型等
8.1 简单箱型图的绘制
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=200,facecolor='white')
x1 = [1,3,5,7,9]
x2 = [10,22,13,15,8,19]
x3 = [18,31,18,19,14,29]
plt.title('箱型图的绘制结果',fontsize=10)
plt.boxplot([x1,x2,x3],vert=True,patch_artist=True,showmeans=True,notch=False,widths=0.6)
plt.show()
8.2 通过箱型图判断异常值
箱型图每部分具体含义以及如何通过箱型图识别异常值
- 下四分位:上图中的下四分位数是指数据的25%分位点所对应的值(Q1)。计算分位数可以使用Pandas的
quantile
函数。例如,Q1=df[‘总消费’].quantile(q=0.25); -
中位数:中位数即为数据的50%分位点所对应的值(Q2);
-
上四分位:上四分位则为数据的75%分位点所对应的值(Q3);
-
上限:上限的计算公式为:Q3+1.5(Q3-Q1)
-
下限:下限的计算公式为:Q1-1.5(Q3-Q1)
-
分位差:Q3-Q1。
如果使用箱型图识别异常值,其判断标准是,当变量的数值大于箱型图的上限或者小于箱型图的下限时,就可以将这样的数据判定为异常值。
- 异常值:x > Q3+1.5(Q3-Q1) 或者 x < Q1-1.5(Q3-Q1)
- 极端异常值:Q3+3(Q3-Q1) 或者 x < Q1-3(Q3-Q1)
import matplotlib.pyplot as plt
import pandas as pd
#设置画布大小和DPI
plt.figure(figsize=(5,3),dpi=200,facecolor='white')
#设置中文字体,防止乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel(r'/Users/jackeroo/Downloads/Python数据分析从入门到实践-源码/05/32/tips.xlsx')
plt.boxplot(x=df['总消费'],
whis = 1.5,
widths = 0.3,
patch_artist = True,
showmeans = True,
boxprops = {'facecolor':'RoyalBlue'},
#指定异常值填充色,边框色和大小
flierprops = {'markerfacecolor':'red','markeredgecolor':'red','markersize':3},
#指定中位数的标记符号和颜色
meanprops = {'marker':'h','markeredgecolor':'black','markersize':8},
#指定均值点的标记符号,填充色和大小
medianprops = {'linestyle':'--','color':'orange'},
labels = [''] #去除x轴的刻度值
)
plt.title('箱型图绘制结果',fontsize=10)
plt.show()
#计算上四分位数和下四分位数
Q1 = df['总消费'].quantile(q=0.25)
Q3 = df['总消费'].quantile(q=0.75)
#基于1.5倍的四分位数差计算上下限对应的值
low_limit = Q1-1.5*(Q3-Q1)
up_limit = Q3+1.5*(Q3-Q1)
#查找异常值
val = df['总消费'][(df['总消费'] > up_limit) | (df['总消费'] < low_limit)]
print('异常值如下:')
print(val)
异常值如下:
26 44.30
77 43.11
131 48.27
163 48.17
171 50.81
182 45.35
184 40.55
194 48.33
230 41.19
Name: 总消费, dtype: float64
9 绘制3D图表
额外安装工具包
pip install -- upgrade matplotlib
安装好这个模块后,即可调用mpl_tookits下的mplot3d类进行3D图表的绘制
9.1 3D柱形图的绘制
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
import numpy as np
#设置画布大小和DPI
fig = plt.figure(figsize=(5,3),dpi=300,facecolor='white')
#设置中文字体,防止乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
axes3d = Axes3D(fig)
zs = [1,5,10,15,20]
for z in zs:
x = np.arange(0,10)
y = np.random.randint(0,30,size=10)
axes3d.bar(x,y,zs=z,zdir='x',color=['red','green','yellow','c'])
plt.title('3D柱形图绘制结果',fontsize=6)
plt.show()
9.2 3D曲面图
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
#设置中文字体,防止乱码
plt.rcParams['font.sans-serif'] = ['KaiTi']
fig = plt.figure(figsize=(5,3),dpi=300,facecolor='white')
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
plt.show()
10. 绘制多个子图表
语法如下
matplotlib.pyplot.subplot(*args,**kwargs)
参数解释
- args: 当传入的参数未知时,使用 args
- ** kwargs:关键字参数,可他参数可选
10.1绘制多子图的空表——subplot()
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(5,3),dpi=200,facecolor='white')
plt.subplot(2,3,1)
plt.subplot(2,3,2)
plt.subplot(2,3,3)
plt.subplot(2,3,4)
plt.subplot(2,3,5)
plt.subplot(2,3,6)
plt.show()
10.2 绘制包含多个子图的图表
import matplotlib.pyplot as plt
plt.figure(figsize=(5,3),dpi=300,facecolor='pink')
#绘制第一个子图——折线图
plt.subplot(2,2,1)
plt.plot([1,2,3,4,5])
#绘制第二个子图——散点图
plt.subplot(2,2,2,)
plt.plot([1,2,3,4,5],[2,5,8,12,18],'ro')
#绘制第三个图表——柱形图
plt.subplot(2,1,2)
x = [1,2,3,4,5,6]
height = [10,20,30,40,50,60]
plt.bar(x,height)
plt.show()
10.3 subplots()
绘制多子图
语法如下:
matplotlib.pyplot.subplots(nrows,ncols,sharex,sharey,squeeze,subplot_kw,gridspec_kw,**fig_kw)
参数解释
- nrows,ncols:表示画布分割成几行几列,例如nrows=2,ncols=2表示将画布分割成2行2列,且起始值都为0,当调用画布中的坐标时,ax[0,0]表示调用左上角的坐标,ax[1,1]表示调用右下角的坐标
- sharex, sharey: 表示坐标轴的属性是否相同,
10.3.1 绘制空表
import matplotlib.pyplot as plt
figure,axes = plt.subplots(2,3)
plt.show()
10.3.2 使用subplots()
绘制多子图图表
import matplotlib.pyplot as plt
figure,axes = plt.subplots(2,2)
axes[0,0].plot([1,2,3,4,5])
axes[0,1].plot([1,2,3,4,5],[2,5,8,12,15],'ro')
#绘制第三个子图表
x = [1,2,3,4,5,6]
height = [10,20,30,40,50,60]
axes[1,0].bar(x,height)
#绘制第四个子图表
x = [2,5,12,70,2,9]
axes[1,1].pie(x,autopct='%1.1f%%')
plt.show()
Jackeroo的个人独立博客 | Working | Life | Interests » 数据可视化—使用matplotlib绘制常用类型图表