数据可视化—使用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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

8.2 通过箱型图判断异常值

箱型图每部分具体含义以及如何通过箱型图识别异常值

image.png

  1. 下四分位:上图中的下四分位数是指数据的25%分位点所对应的值(Q1)。计算分位数可以使用Pandas的quantile函数。例如,Q1=df[‘总消费’].quantile(q=0.25);

  2. 中位数:中位数即为数据的50%分位点所对应的值(Q2);

  3. 上四分位:上四分位则为数据的75%分位点所对应的值(Q3);

  4. 上限:上限的计算公式为:Q3+1.5(Q3-Q1)

  5. 下限:下限的计算公式为:Q1-1.5(Q3-Q1)

  6. 分位差: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)


png

异常值如下:
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()


png

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()


png

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()


png

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()


png

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()


png

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()


png

1. 本站所有文章和内容源于站长整理与输出,如有侵权请邮件联系站长!
2. 本站部分文章教程提供PDF版本付费下载收藏备用,网页版可免费阅读与浏览!
3. 联系站长或者加入社群,请通过顶部菜单栏加入,或者邮件联系 jackerooliu@gmail.com.
Jackeroo的个人独立博客 | Working | Life | Interests » 数据可视化—使用matplotlib绘制常用类型图表

发表评论