Python数据分析与展示②:Matplotlib库

一、Matplotlib库简介

Matplotlib库由各种可视化类构成,是Python优秀的数据可视化第三方库。

详见:Matplotlib效果实例

matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式。

引用时约定成俗:

import matplotlib.pyplot as plt

绘图例:

import matplotlib.pyplot as plt
plt.plot([3,1,4,5,2])
plt.ylabel('Grade')          #增加y坐标标注
plt.savefig('test',dpi=600)  #将输出图形存储为文件,默认PNG格式,可以通过dpi修改输出质量
plt.show()

绘图结果:
绘图例

二、pyplot的plot函数

1.纵览plot:

plt.plot(x, y, format_string, **kwargs)
#  x  : x轴数据,列表or数组,可选
#  y  : y轴数据,同上
#  format_string  : 控制曲线的格式字符串,可选
#  **kwargs  :第二组或更多的(x,y,format_string)

注:当绘制多条曲线时,各条曲线的x不能省略

例:

import matplotlib.pyplot as plt
import numpy as np
a = np.arange(10)
plt.plot(a,a*1.5,a,a*2.5,a,a*3.5)
plt.show()

结果:
在这里插入图片描述
2. plot参数之format_string: 控制曲线的格式字符串,由颜色字符、风格字符、标记字符组成(皆可选)

1)颜色字符

在这里插入图片描述
2)风格字符

在这里插入图片描述

3)标记字符

在这里插入图片描述

4)颜色字符、风格字符、标记字符组合使用

import matplotlib.pyplot as plt
import numpy as np
a = np.arange(10)
plt.plot(a,a*1.5,'go-',a,a*2.5,'rx',a,a*3.5,'*',a,a*4.5,'b-.')
plt.show()

在这里插入图片描述

三、pyplot的中文显示

1.使用rcParams修改字体

  • rcParams属性:

在这里插入图片描述

  • 中文字体的种类
rcParams['font.family']

在这里插入图片描述

例:

import matplotlib.pyplot as plt
import matplotlib 
import numpy as np

matplotlib.rcParams['font.family'] = 'STSong'
matplotlib.rcParams['font.size'] = 20

a = np.arange(0.0,5.0,0.02)

plt.xlabel('横轴:时间')
plt.ylabel('纵轴:振幅')
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()

在这里插入图片描述
该方法的缺点是要改变图窗全局的字体。
下面介绍第二种只改变局部需要显示中文的地方。

2.在有中文输出的地方,增加一个属性:fontproperties

import matplotlib.pyplot as plt
import numpy as np

a = np.arange(0.0,5.0,0.02)

plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=20)
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()

在这里插入图片描述

四、pyplot的文本显示

  • plt.xlabel()--------对X轴增加文本标签
  • plt.ylabel()--------对Y轴增加文本标签
  • plt.title()-----------对图形整体增加文本标签
  • plt.text()-----------在任意位置增加文本
  • plt.annotate()----在图形中增加带箭头的注解

例1:

import matplotlib.pyplot as plt
import numpy as np

a = np.arange(0.0,5.0,0.02)
plt.plot(a,np.cos(2*np.pi*a),'r--')

plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=15,color='green')
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=15)
plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontproperties='SiHei',fontsize=25)
plt.text(2,1,r'$\mu=100$',fontsize=15)   #(2,1)为文本位置坐标

plt.axis([-1,6,-2,2])    #坐标范围
plt.grid(True)   #网格线
plt.show()

在这里插入图片描述
例2:在图形中增加带箭头的注解

plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)   
#依次为要显示的注解、箭头位置、注解位置、箭头参数(参数类型为字典dict)

详情:plt.annotate()函数详细解析

import matplotlib.pyplot as plt
import numpy as np

a = np.arange(0.0,5.0,0.02)
plt.plot(a,np.cos(2*np.pi*a),'r--')

plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=15,color='green')
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=15)
plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontproperties='SimHei',fontsize=25)
plt.annotate(r'$\mu=100$',xy=(2,1),xytext=(3,1.5), 
             arrowprops=dict(facecolor='black',shrink=0.1,width=2))  
            #shrink:总长度的一部分,从两端“收缩”
            #width:箭头的宽度(以点为单位) 
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()

在这里插入图片描述

五、pyplot的子绘图区域

理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始

1.分区绘图

plt.subplot(nrows, ncols, plot_number)
#将图窗分为nrows行ncols列,并选取第plt_number个子区域
#例如:
    #将图窗分为3行2列,并选取第4个子区域
	plt.subplot(3,2,4)  
	#或plt.subplot(324)   与上等价

在这里插入图片描述

2.复杂的绘图区域

在这里插入图片描述

  • subplot2grid函数:
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1) 
#设定m*n的格子、选中某个格子、在行(cols)/列(rows)的方向上占用几个格子

例:

import matplotlib.pyplot as plt

plt.subplot2grid((3,3),(0,0),colspan=3) 
 #设定3*3的格子,选中第一行第一列的格子,在行的方向上占用3个
plt.subplot2grid((3,3),(1,0),colspan=2)
plt.subplot2grid((3,3),(1,2),rowspan=2)
 #设定3*3的格子,选中第二行第三的格子,在列的方向上占用2个格子
plt.subplot2grid((3,3),(2,0))
plt.subplot2grid((3,3),(2,1))

在这里插入图片描述

  • GridSpec类
import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt

gs = gridspec.GridSpec(3,3)

ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,:-1])
ax3 = plt.subplot(gs[1:,-1])
ax4 = plt.subplot(gs[2,0])
ax5 = plt.subplot(gs[2,1])

在这里插入图片描述

六、pyplot基础图表函数概述

1.pyplot的基础图标函数

函数说明
plt.plot(x,y,fmt,…)绘制一个坐标图
plt.boxplot(data,notch,position)绘制一个箱形图
plt.bar(left,height,width,bottom)绘制一个条形图
plt.barh(width,bottom,left,height)绘制一个横向条形图
plt.polar(theta, r)绘制极坐标图
plt.pie(data, explode)绘制饼图
plt.psd(x,NFFT=256,pad_to,Fs)绘制功率谱密度图
plt.specgram(x,NFFT=256,pad_to,F)绘制谱图
plt.cohere(x,y,NFFT=256,Fs)绘制X‐Y的相关性函数
plt.scatter(x,y)绘制散点图,其中,x和y长度相同
plt.step(x,y,where)绘制步阶图
plt.hist(x,bins,normed)绘制直方图
plt.contour(X,Y,Z,N)绘制等值图
plt.vlines()绘制垂直图
plt.stem(x,y,linefmt,markerfmt)绘制柴火图
plt.plot_date()绘制数据日期

例1:饼图的绘制plt.pie()

import matplotlib.pyplot as plt

labels = 'a','b','c','d'
sizes = [15,30,45,10]
explode = (0,0.1,0,0)

plt.pie(sizes,explode, labels=labels,autopct='%1.1f%%',
        shadow=False,startangle=90)
plt.show()

在这里插入图片描述
添加plt.axis(‘equal’)后:

import matplotlib.pyplot as plt

labels = 'a','b','c','d'
sizes = [15,30,45,10]
explode = (0,0.1,0,0)

plt.pie(sizes,explode, labels=labels,autopct='%1.1f%%',
        shadow=False,startangle=90)
plt.axis('equal')
plt.show()

在这里插入图片描述
例2:直方图的绘制plt.hist()

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(0)
mu,sigma = 100,20   #均值和方差
a = np.random.normal(mu,sigma,size=100)

plt.hist(a,20,normed=1,histtype='stepfilled',facecolor='b',alpha=0.75) 
#a后的20表示直方的条数
plt.title('Histogram')
plt.show()

在这里插入图片描述
例3:极坐标图的绘制

面向对象绘制方式:
import numpy as np
import matplotlib.pyplot as plt
 
 
N = 15   #饼状个数
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 2 * np.random.rand(N)
 
ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=0.0)
 #theta:角度间隔
 #radii:每个极轴长度
 #width:每个极角大小
for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r / 10.))
    bar.set_alpha(0.5)
 
plt.show()

在这里插入图片描述
例4:散点图的绘制(面向对象)

import numpy as np
import matplotlib.pyplot as plt
 
fig,ax = plt.subplots()
ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')
ax.set_title('Simple Scatter')

plt.show()

在这里插入图片描述

注:

此篇博客仅为作者本人学习笔记。
如有侵权,请私信联系。
参考来源:
中国大学mooc课程----Python数据分析与展示-----嵩天老师(北京理工大学)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloudcodes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值