python 爬虫数据分析与展示笔记(二)
-
Matplotlib
-
import matplotlib.pyplot as plt
(引入模块的别名) -
代码示例:
import matplotlib.pyplot as plt plt.plot([0,2,4,6,8],[3,1,4,5,2]) plt.ylabel("grade") #y轴增加标签:grade plt.axis([-1,10,0,6]) #-1表示x轴的起始是-1,10表示x轴的终点是10 plt.savefig('test',dpi=600) #保存图片为text,600像素点 plt.show() #展示绘图结果
-
pyplot的绘图区域
plt.subplot(nrows,ncols,plot_number)
-
nrows:numberofrows(行),ncols:numberofcolumns(列),plot_number:区域编号
-
实例:
import numpy as np import matplotlib.pyplot as plt def f(t): #能量衰减函数 return np.exp(-t) * np.cos(2*np.pi*t) a = np.arange(0.0,5.0,0.02) plt.subplot(211) #将绘图区域分为两行一列并选中第一块 plt.plot(a,f(a)) #在该区域绘制a对应的f(a)衰减函数 plt.subplot(2,1,2) #subplot选中子绘图区 plt.plot(a,np.cos(2*np.pi*a),'r--') #r--表示虚线 plt.show()
-
pyplot的plot()函数
-
plt.plot(x,y,format_string,**kwargs)
-
x:x轴数据,列表或数组,可选 (注:当绘制多条曲线时,各条曲线的x不能省略)
-
y:y轴数据,列表或数组
-
format_string:控制曲线的格式字符串,可选(由颜色字符、风格字符和标记字符组成)
-
颜色字符
颜色字符 说明 颜色字符 说明 b 蓝色 m 洋红色magenta g 绿色 y 黄色 r 红色 k 黑色 c 青绿色cyan w 白色 #008000 RGB某颜色 0.8 灰度值字符串 -
风格字符
风格字符 说明 ‘-’ 实线 ‘–’ 破折线 ‘-.’ 点划线 ‘:’ 虚线 ’ ‘’ ’ 无线条 -
标记字符
标记字符 说明 标记字符 说明 标记字符 说明 ‘.’ 点标记 ‘1’ 下花三角标记 ‘h’ 竖六边形标记 ‘,’ 像素标记(极小点) ‘2’ 上花三角标记 ‘H’ 横六边形标记 ‘o’ 实心圈标记 ‘3’ 左花三角标记 ‘+’ 十字标记 ‘v’ 倒三角标记 ‘4’ 右花三角标记 ‘x’ x标记 ‘^’ 上三角标记 ‘s’ 实心方形标记 ‘D’ 菱形标记 ‘>’ 右三角标记 ‘p’ 实心五角标记 ‘d’ 瘦菱形标记 ‘<’ 左三角标记 ‘*’ 星形标记 ‘|’ 垂直线标记 -
例:
import matplotlib.pyplot as plt import numpy as np a = np.arange(10) plt.plot(a,a*1.5,'go-') #斜率1.5,g绿色,o实心圈,-实线 plt.show()
-
-
** kwargs:第二组或更多(x,y,format_string)
- color:控制颜色,color=‘green’
- linestyle:线条风格,linestyle=‘dashed’
- marker:标记风格,marker=‘o’
- markerfacecolor:标记颜色,markerfacecolor=‘blue’
- markersize:标记尺寸,markersize=20
-
-
pyplot的中文显示:
-
方法一:rcParams修改字体实现 (pyplot不默认支持中文显示)
属性 说明 ‘font.family’ 用于显示字体的名字 ‘font.style’ 字体风格,正常’normal’或斜体’italic’ ‘font.size’ 字体大小,整数字号或者’large’、‘x-small’ 中文字体 说明 ‘SimHei’ 中文黑体 ‘Kaiti’ 中文楷体 ‘LiSu’ 中文隶书 ‘FangSong’ 中文仿宋 ‘YouYuan’ 中文幼圆 ‘STSong’ 华文宋体 例:(绘制余弦波)
import numpy as np import matplotlib.pyplot as plt import matplotlib 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()
-
方法二:在有中文输出的地方,增加一个属性
fontproperties
-
例:
import numpy as np import matplotlib.pyplot as plt 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() 在图形中增加带箭头的注释 -
例:
import numpy as np import matplotlib.pyplot as plt a = np.arange(0.0,5.0,0.02) #生成一个数组a plt.plot(a,np.cos(2*np.pi*a),'r--') #绘制图像 #坐标系的文本显示部分 plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=15,color='green') plt.xlabel('纵轴:振幅',fontproperties='SimHei',fontsize=15) plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontproperties='SimHei',fontsize=25) #一对美元符号框起来的是LaTex公式的标志 plt.text(2,1,r'$\mu=100$',fontsize=15) #前两个参数表示横轴和纵轴坐标 plt.axis([-1,6,-2,2]) #axis()函数确定横纵坐标范围,横坐标(-1~6),纵坐标(-2~2) plt.grid(True) #调用grid()函数,为True表示加入网格曲线 plt.show() #显示图像
-
增加注释:
plt.annotate(s,xy=arrow_crd,xytext=text_crd,arrowprops=dict)
-
s:一个字符串,表示要注释的内容
-
xy=arrow_crd:箭头所在位置的坐标
-
xytext=text_crd:注释文本所在的坐标
-
arrowprops=dict:用字典对箭头属性定义
-
例:
import numpy as np import matplotlib.pyplot as plt 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.xlabel('纵轴:振幅',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))#facecolor定义箭头颜色,shrink使箭头的头尾与所指内容和文本保留空白,width定义箭头宽度 plt.axis([-1,6,-2,2]) plt.grid(True) plt.show()
-
-
-
pyplot的子绘图区域
-
plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)
-
例:
plt.subplot2grid((3,3),(0,0),colspan=3) plt.subplot2grid((3,3),(1,0),colspan=2) plt.subplot2grid((3,3),(1,2),colspan=2) plt.subplot2grid((3,3),(2,0)) plt.subplot2grid((3,3),(2,1))
(个人理解,画的草图)
-
GridSpec类
-
例:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec 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])
-
-
-
! 这里不是很理解[1,:-1]和[1:,-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,wxplode) 绘制饼图 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() 绘制数据日期 -
pyplot.pie()饼图绘制实例:
import matplotlib.pyplot as plt labels = 'Frogs','Hogs','Dogs','Logs' sizes = [15,30,45,10] explode = (0,0.1,0,0) #其中的0.1表示使其从饼图中分割下来显示,与原饼图间距0.1 plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=90) plt.axis('equal') #使绘制的饼图为正圆形 plt.show()
-
pyplot.hist()直方图绘制
import numpy as np import matplotlib.pyplot as plt 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) #20表示直方的个数bin,normed=1则纵轴表示概率,normed=0则纵轴表示个数 plt.title('Histogram') plt.show()
-
面向对象绘制极坐标
import numpy as np import matplotlib.pyplot as plt N = 20 theta = np.linspace(0.0,2*np.pi,N,endpoint=False) radii = 10 * np.random.rand(N) width = np.pi / 4*np.random.rand(N) ax = plt.subplot(111,projection='polar') #绘制子绘图区域 bars = ax.bar(theta,radii,width=width,bottom=0.0) for r,bar in zip(radii,bars): bar.set_facecolor(plt.cm.viridis(r / 10.)) bar.set_alpha(0.5) plt.show()
-
面向对象绘制散点图
import numpy as np import matplotlib.pyplot as plt fig,ax = plt.subplots() #fig图像对象 ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o') #randn()生成一个正态分布的函数 ax.set_title('Simplt Scantter')
-