Python数据分析之matplotlib学习一

参考官方网站:链接

这个也可以

Matplotlib库的使用,Matplotlib库是由各种可视化类构成,内部结构复杂。matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式。

import matplotlib.pyplot as plt

1 matplotlib库小测

x轴默认为列表的索引值。

2 matplotlib库小测综合

3 pyplot的绘图区域

(1)plt.subplot(nrows,ncols,plot_number)

plt.subplot(3,2,4)/plt.subplot(324)   在全局区域中创建一个分区体系,并定位到一个子绘图区域。

(2)plt.subplot2grid()

plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)

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

import matplotlib.pyplot as plt
import numpy as np

def f(t):
    return np.exp(-t)*np.cos(2*np.pi*t)
    
a1=np.arange(0,5,0.02)
a2=np.arange(0,10,0.01)


plt.subplot2grid((3,3),(0,0),colspan=3)
plt.plot(a1,f(a1))

plt.subplot2grid((3,3),(1,0),colspan=2)
plt.plot(a1,f(a1))

plt.subplot2grid((3,3),(1,2),rowspan=2)
plt.plot(a2,f(a2))

plt.subplot2grid((3,3),(2,0))
plt.plot(a2,f(a2))

plt.subplot2grid((3,3),(2,1))
plt.plot(a2,f(a2))

plt.show()

(3)GridSpec类(相比于第二种,推荐使用这一种)

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

def f(t):
    return np.exp(-t)*np.cos(2*np.pi*t)
    
a1=np.arange(0,5,0.02)
a2=np.arange(0,10,0.01)

gs=gridspec.GridSpec(3,3)

plt.subplot(gs[0,:])
plt.plot(a1,f(a1))

plt.subplot(gs[1,:-1])
plt.plot(a1,f(a1))

plt.subplot(gs[1:,-1])
plt.plot(a2,f(a2))

plt.subplot(gs[2,0])
plt.plot(a2,f(a2))

plt.subplot(gs[2,1])
plt.plot(a2,f(a2))

plt.show()

4详解plt.plot

plt.plot(x,y,format_string,**kwargs)

x X轴数据,列表或元组,可选
y Y轴数据,列表或数组。
format_string 控制曲线的格式字符串,可选
**kwargs 第二组或更多的(x,y,format_string)

当绘制多条曲线时,各条曲线的X值不能省略。

format_string:控制曲线的格式字符串,可选,由颜色字符,风格字符和标记字符组成。

颜色字符 说明 颜色字符 说明
‘b’ 蓝色 'm' 洋红色
'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-',a,a*2,'rx-.',a,a*2.5,'*:',a,a*3,'bD-')
plt.show()

**kwargs:第二组或更多(x,y,**kwargs)

color:控制颜色,color='green'

linestyle: 线条风格,linestyle='dashed'

marker:标记风格,marker='o'

markerfacecolor:标记颜色,markerfacecolor=‘blue’

markersize标记尺寸,markersize=20

5 pyplot的中文显示

法一 pyplot并不默认支持中文显示,需要rcParams修改字体实现。

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family']='SimHei'
plt.plot([3,1,4,5,2])
plt.ylabel('纵轴(值)')
plt.show()

属性 说明
'font.family' 用于显示字体名称
'font.style' 字体风格,正常'normal'或斜体‘italic’
'font.size' 字体大小,整数字号或者‘large’,‘x_small’

rcParams['font.family']

字体名称 说明
‘SimHei’ 中文黑体
'Kaiti' 中文楷体
'LiSu' 中文隶书
'FangSong' 中文仿宋
'YouYuan' 中文幼圆
‘STSong’ 华文宋体
import matplotlib.pyplot as plt
import matplotlib
import numpy as np

a=np.arange(0,10,0.02)

matplotlib.rcParams['font.family']='YouYuan'
matplotlib.rcParams['font.size']=10
plt.xlabel('横轴:时间')
plt.ylabel('纵轴:振幅')
plt.plot(a,np.cos(2*np.pi*a),'bh-.')
plt.show()

法二 在有中文输出的地方,增加一个属性:fontproperties.与法一的优点是,法二并不改变整体的格式,只是改变标签格式,没有改变横纵坐标值的格式,而前者则改变了所有。推荐使用法二

import matplotlib.pyplot as plt
import numpy as np

a=np.arange(0,5,0.02)


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

6 pyplot的文本显示函数

函数 说明
plt.xlabel() 对X轴增加文本标签
plt.ylabel() 对Y轴增加文本标签
plt.title() 对图像整体增加文本标签
plt.text() 对任意位置增加文本
plt.annotate() 在图形中增加带箭头的注释
import matplotlib.pyplot as plt
import numpy as np

a=np.arange(0,5,0.02)


plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=10,color='green')
plt.ylabel('纵轴:振幅',fontproperties='YouYuan',fontsize=10,color='red')
plt.plot(a,np.cos(2*np.pi*a),'b-')
#latex表示
plt.title(r'正弦波实例$y=cos(2\pi x)$',fontproperties='YouYuan',fontsize=20)
plt.text(2,1,r'$\mu=100$',fontsize=15)
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()

import matplotlib.pyplot as plt
import numpy as np

a=np.arange(0,5,0.02)


plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=10,color='green')
plt.ylabel('纵轴:振幅',fontproperties='YouYuan',fontsize=10,color='red')
plt.plot(a,np.cos(2*np.pi*a),'b-')
#latex表示

plt.title(r'正弦波实例$y=cos(2\pi x)$',fontproperties='YouYuan',fontsize=20)
#plt.annotate(s,xy=arrow_crd,xytext=text_crd,arrowprops=dict)
#Shrink表示箭头指的位置到文本的位置留有一定的空白。
plt.annotate(r'$\mu=100$',xy=(2,1),xytext=(3,1.5),
arrowprops=dict(facecolor='black',shrink=0.1,width=2),fontsize=20)
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()

7 pyplot的基础图标函数

饼图

import matplotlib.pyplot as plt

labels='Hui','Hao','Yang','Dong'
sizes=[30,30,20,20]  #每个标签对应的百分比
explode=(0.1,0,0,0)  #对应于0.1的标签凸出来

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

plt.show()

import matplotlib.pyplot as plt

labels='Hui','Hao','Yang','Dong'
sizes=[30,30,20,20]  #每个标签对应的百分比
explode=(0.1,0,0,0)  #对应于0.1的标签凸出来

plt.pie(sizes,explode=explode,labels=labels,autopct='%.1f%%',shadow=True,startangle=90)

#x轴和y轴的尺寸相同,直立起来
plt.axis('equal')
plt.show()

直方图

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
mu,sigma=100,20     #均值和方差
a=np.random.normal(mu,sigma,100)    #生成100个元素,其均值为100,方差为20

#10为bin,直方的个数,即原来的100个数按照最大值,最小值分为10个区间
#density为1表示将元素在某个区间出现的次数归一化为概率。为0则表示出现的个数。
plt.hist(a,10,density=1,histtype='stepfilled',facecolor='b',alpha=0.75)
plt.title('Histogram')

plt.show()

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
mu,sigma=100,20     #均值和方差
a=np.random.normal(mu,sigma,100)    #生成100个元素,其均值为100,方差为20

#10为bin,直方的个数,即原来的100个数按照最大值,最小值分为10个区间
#density为1表示将元素在某个区间出现的次数归一化为概率。为0则表示出现的个数。
plt.hist(a,40,density=0,histtype='stepfilled',facecolor='r',alpha=0.75)
plt.title('Histogram')
plt.xlabel('Value')
plt.ylabel('Numbers')

plt.show()

面向对象绘制散点图(简单)

import numpy as np
import matplotlib.pyplot as plt

fig,ax=plt.subplots()#为空默认为111,fig为图像对象,ax为绘图区域对象
ax.plot(10*np.random.randn(100),10*np.random.randn(100),'ro')
ax.set_title('Simple Scatter')

plt.show()

猜你喜欢

转载自blog.csdn.net/qq_40123329/article/details/81481270