Python 数据分析之matplotlib

matplotlib

标签: Python 数据分析


matplotlib是最流行的用于绘制数据图表的Python库,非常适合创建出版物上用的图表

导入matplotlib库的pyplot模块


    import matplotlib.pyplot as plt #导入模块

绘制折线图


plt.figure():创建一幅图

plt.figure()

通过numpy创建数据:

import numpy as np
x=np.linspace(-np.pi,np.pi,256,endpoint=True)   #四个个参数分别为起始值、结束值、点个数、是否包含结束值点(默认包含)
y=np.sin(x)

plt.plot():画出曲线,参数分别为横坐标,纵坐标,颜色,样式,线宽,透明度,曲线标签信息

plt.plot(x, y, color='green',linestyle='-',linewidth=2,alpha=0.5,label='$y=sin(x)$') #颜色为绿色,样式为实线,线宽为2,透明度0.5,标签信息为y=sin(x)此处引入了Latex公式

颜色参数

‘b’ ‘g’ ‘r’ ‘c’ ‘m’ ‘y’ ‘k’ ‘w’
blue green red cyan magenta yellow black white

样式参数(部分)

‘-‘ ‘–’ ‘-.’ ‘.’ ‘:’ ‘,’ ‘o’ ‘v’ ‘^’ ‘>’ ‘<’ ‘*’ ‘+’ ‘x’
实线 虚线 线点 点虚线 像素点 上三角 下三角 左三角 右三角 星型 +型 x型

plt.xlabel() :横纵坐标的标签设置

plt.xlabel('x轴标签信息')    #为y轴加注释
plt.ylabel('y轴标签信息')    #为y轴加注释

plt.axis():设置横纵坐标的范围

plt.axis([-5,5,-2,2])    #横坐标范围-5到5,纵坐标范围-2到2

plt.title():图像标题设置

plt.title("sin函数")   #添加标题

plt.grid():是否显示网格

plt.grid(True)  #表示显示网格

plt.legend():当plot中有定制了曲线标签信息时,用于显示图例

plt.legend(loc='upper left')    #显示图例,显示位置为左上方

位置参数可以为:

‘best’ ‘upper right’ ‘upper left’ ‘lower left’ ‘lower right’ ‘right’ ‘center left’ ‘center right’ ‘lower center’ ‘upper center’ ‘center’

plt.show():显示图像

plt.show()  #显示所设置的图像

完整代码运行

import matplotlib.pyplot as plt #导入模块
import numpy as np

x=np.linspace(-np.pi,np.pi,256,endpoint=True)   #四个个参数分别为起始值、结束值、点个数、是否包含结束值点(默认包含)
y=np.sin(x)
plt.figure()
plt.plot(x, y, color='green',linestyle='-',linewidth=2,alpha=0.5,label='$y=sin(x)$')
plt.xlabel('x轴标签信息')    #为x轴加注释
plt.ylabel('y轴标签信息')    #为y轴加注释
plt.axis([-5,5,-2,2])    #横坐标范围-5到5,纵坐标范围-2到2
plt.title("sin函数")   #添加标题
plt.grid(True)  #表示显示网格(True可省略)
plt.legend(loc='upper left')    #显示图例,显示位置为左上方
plt.show()  #显示所设置的图像

如有需要,我们还可以更改坐标轴的显示格式

plt.gca():坐标轴的编辑

ax=plt.gca()    #ax表示当前坐标轴
ax.spines['right'].set_color('none')    #右侧边界线颜色设为空,表示隐藏
ax.spines['top'].set_color('none')  #上侧边界线颜色设为空,表示隐藏
ax.spines['left'].set_position(('data',0))    #左侧边界线位置设为原点
ax.spines['bottom'].set_position(('data',0))  #下侧边界线位置设为原点
ax.xaxis.set_ticks_position('bottom') #设置横坐标标度显示在x轴下方
ax.yaxis.set_ticks_position('left') #设置纵坐标标度显示在y轴左侧
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],['$-\pi$','$-\pi/2$','0','$\pi/2$','$\pi$'])   #挨个指定横坐标标度显示格式:显示在$-\pi$,$-\pi/2$,'0','$\pi/2$','$\pi$'处的5个点(此处引用了Latex公式)
plt.yticks(np.linspace(-1,1,5,endpoint=True))   #指定纵坐标标度显示格式:显示在-1到1之间的5个点
for label in ax.get_xticklabels()+ax.get_yticklabels():   #设置x、y坐标轴标度的字体格式
    label.set_fontsize(16)  #字体大小为16
    label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.5))  #背景颜色为白色,边缘颜色无(隐藏),透明度0.5

扩展:颜色填充、指示线

plt.fill_between(x,np.abs(x)<0.5,y,y>0.5,color='blue',alpha=0.5)    #填充颜色
plt.plot([np.pi/2,np.pi/2],[0,np.sin(np.pi/2)],color='yellow',linewidth=2,linestyle='-')    #画线

绘制散点图


import numpy as np
import matplotlib.pyplot as plt

fig=plt.figure()
fig1=fig.add_subplot(2,2,1) #把显示区域分为两行两列,fig1显示在第一块区域
n=128
x=np.random.normal(0,1,n) #随机生成100个0到1之间的服从正态分布的数
y=np.random.normal(0,1,n)
t=np.arctan2(y,x)
#plt.axes([0.025,0.025,0.95,0.95])
fig1.scatter(x,y,s=75,c=t,alpha=0.5) #s表示散点大小,c表示颜色,alpha表示透明度
plt.xlim(-1.5,1.5) #x的范围
plt.xticks([])
plt.ylim(-1.5,1.5) #y的范围
plt.yticks([])
plt.axis()
plt.title('scatter')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

绘制直方图


fig2=fig.add_subplot(2,2,2) #把显示区域分为两行两列,fig2显示在第二块区域
n=10
x=np.arrange(n)
y1=(1-x/float(n))*np.random.uniform(0.5,1.0,n)
y2=(1-x/float(n))*np.random.uniform(0.5,1.0,n)
fig2.bar(x,+y1,facecolor='#9999ff',edgecolor='white')
fig2.bar(x,-y2,facecolor='#ff9999',edgecolor='white')
for x,y in zip(x,y1):
    plt.text(x+0.4,y+0.05,'%.2f'%y,ha='center',va='bottom')
for x,y in zip(x,y2):
    plt.text(x+0.4,-y-0.05,'%.2f'%y,ha='center',va='top')
plt.show()

绘制饼状图


fig3=fig.add_subplot(2,2,3) #把显示区域分为两行两列,fig3显示在第三块区域
n=20
z=np.ones(n)
z[-1]*=2
plt.pie(z,explode=z*.05,color=['%f'%(i/float(n))for i in range(n)],labels=['%f'%(i/float(n))for i in range(n)])
pl.gca().set_aspect('equal')
plt.xticks([])
plt.yticks([])

绘制极坐标图


fig4=fig.add_subplot(2,2,4,polar=True)  #把显示区域分为两行两列,fig4显示在第四块区域
n=20
theta=np.arange(0.0,2*np.pi,2*np.pi/n)
radii=10*np.random.rand(n)
figure4.polar(thata,radii)
plt.show()

你可能感兴趣的:(数据分析)