数据分析前篇二(数据可视化)

导入绘图工具包

import matplotlib.pypolt as mp

基本绘图函数

mp.plot(水平坐标(数组),垂直坐(数组),linestyle = '线型',linewight = '线宽',color = '颜色')
x = np.linspace(-np.pi, np.pi, 1000)    #产生-pi到pi的1000个均匀分布的样本点
cos_y = np.cos(x) / 2
sin_y = np.sin(x)
y = [5,6,7,8]
mp.plot(x, cos_y, linestyle='--', linewidth=6,
        color='dodgerblue')
mp.plot(x, sin_y, linestyle=':', linewidth=0.5,
        color='orangered')
# ':'代表虚线
# '--'代表实线
#常见的颜色表示
limegreen 绿色
dodgerblue 蓝色
orangered 橙色

这里写图片描述

绘图美化

mp.xlim(左边界, 右边界)
mp.ylim(底边界, 顶边界)
mp.xlim(x.min(),x.max())
(-3.1415926535897931, 3.1415926535897931)
mp.ylim(sin_y.min(),sin_y.max())
(-0.99999876382859743, 0.99999876382859743)
mp.xticks(刻度位置数组, 刻度文本数组) 返回两个值刻度位置数组、刻度文本标签
mp.yticks(刻度位置数组, 刻度文本数组)
mp.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi * 3 / 4,
           np.pi],
          [r'$-\pi$', r'$-\frac{\pi}{2}$', r'$0$',
           r'$\frac{\pi}{2}$', r'$\frac{3\pi}{4}$',
           r'$\pi$'])
 mp.yticks([-1, -0.5, 0.5, 1])
设置移动脊柱坐标
首先使用gca获取当前图标的子图,使用spines来设置坐标代码如下
import numpy as np
import matplotlib.pyplot as mp
x = np.linspace(-np.pi,np.pi,1000)
cos_y = np.cos(x)/2
sin_y = np.sin(x)
mp.xlim(x.min()*1.1,x.max()*1.1)
mp.ylim(sin_y.min(),sin_y.max()*1.1)
mp.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi*3/4,np.pi])
mp.yticks([-1,-0.5,0.5,1])
ax = mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

mp.plot(x,cos_y,linestyle = '--',linewidth = 6,color = 'dodgerblue')
mp.plot(x,sin_y,linestyle = ':',linewidth = 6,color = 'orangered')

mp.show()

这里写图片描述

设置图例和标签
mp.plot(..., label=图例文本)
mp.legend(loc='upper left')
mp.plot(x,cos_y,linestyle = '--',linewidth = 6,color = 'dodgerblue',label = r'$y= \frac{1}{2}cos(x)$')
mp.plot(x,sin_y,linestyle = ':',linewidth = 6,color = 'orangered',label =r'$y = sin(x)$')
mp.legend(loc = 'upper left')

这里写图片描述

绘制不同类型的图

绘制点图&添加文本注释

mp.scatter(水平坐标数组, 垂直坐标数组,marker=点型, s=大小, edgecolor=勾边色,facecolor=填充色, zorder=Z序)
mp.annotate( 备注文本,xy=目标位置,xycoords=目标坐标系,xytext=文本位置,textcoords=文本坐标系,fontsize=字体大小, arrowprops=箭头属性)
其中z序表示窗口激活的顺序
import numpy as np
import matplotlib.pyplot as mp
x = np.linspace(-np.pi,np.pi,1000)
cos_y = np.cos(x)/2
sin_y = np.sin(x)
xo = np.pi*3/4
yo_cos = np.cos(xo)/2
yo_sin = np.sin(xo)


mp.xlim(x.min()*1.1,x.max()*1.1)
mp.ylim(sin_y.min(),sin_y.max()*1.1)
mp.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi*3/4,np.pi])
mp.yticks([-1,-0.5,0.5,1])
ax = mp.gca()
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

mp.plot(x,cos_y,linestyle = '--',linewidth = 6,color = 'dodgerblue',label = r'$y= \frac{1}{2}cos(x)$')
mp.plot(x,sin_y,linestyle = ':',linewidth = 6,color = 'orangered',label =r'$y = sin(x)$')


mp.plot([xo,xo],[yo_cos,yo_sin],linestyle = ':',linewidth = 1,color = 'limegreen')

mp.scatter([xo,xo],[yo_cos,yo_sin],s = 60,edgecolors='limegreen',facecolor = 'white',zorder = 3)

mp.annotate(r'$\frac{1}{2}cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{4}$',
            xy=(xo,yo_cos),
            xycoords='data',
            xytext= (-90,-40),
            textcoords='offset points',
            fontsize=14,
            arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))


mp.legend(loc = 'upper left')
mp.show()


这里写图片描述

绘制柱形图

mp.bar(水平坐标数组, 高度数组, ec=边缘颜色,fc=填充颜色, label=标签文本,alpha=透明度)
import numpy as np
import matplotlib.pyplot as mp
n= 12
x = np.arange(n)
y1 = (1-x/n)*np.random.uniform(0.5,1.0,n)
y2 = (1-x/n)*np.random.uniform(0.5,1.0,n)

mp.figure('bar',facecolor='lightgray')
mp.title('Bar',fontsize = 20)
mp.ylim(-1.25,1.25)
mp.xlabel('x',fontsize =14)
mp.ylabel('y',fontsize = 14)
mp.xticks(x,x+1)
mp.tick_params(labelsize =10)
mp.grid(axis='y',linestyle = ':')
mp.bar(x,y1,ec='white',fc= 'dodgerblue',label = 'Sample 1')

for _x,_y in zip(x,y1):
    mp.text(_x, _y,
            '%.2f'%_y,
            ha='center',    #水平出现位置
            va='bottom',    #垂直出先锋位置
            size=8,
            alpha=0.5)
mp.bar(x,-y2,ec='white',fc= 'dodgerblue',label = 'Sample 2')

for _x,_y in zip(x,y2):
    mp.text(_x, -_y-0.015,
            '%.2f'%_y,
            ha='center',    #水平出现位置
            va='top',    #垂直出先锋位置
            size=8,
            alpha=0.5)


mp.legend()
mp.show()

这里写图片描述

绘制等高线图
mp.contour(x, y, z, 线数, colors=颜色, linewidths=线宽)
mp.contourf(x, y, z, 线数, cmap=颜色映射)
import numpy as np
import matplotlib.pyplot as mp
n = 1000
x,y = np.meshgrid(np.linspace(-3,3,n),
                  np.linspace(-3,3,n))
z = (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)


mp.figure('Contor',facecolor='lightgray')
mp.title('Contor',fontsize = 20)
mp.ylim(-1.25,1.25)
mp.xlabel('x',fontsize =14)
mp.ylabel('y',fontsize = 14)
# mp.xticks(x,x+1)
mp.tick_params(labelsize =10)
mp.grid(linestyle = ':')
mp.contourf(x,y,z,8,cmap='jet')
cntr = mp.contour(x,y,z,8,colors = 'black')
mp.clabel(cntr,inline_spacing = 1,fmt='%.1f',fontsize =10)

mp.show()

这里写图片描述

绘制热像图
mp.imshow(矩阵, cmap=颜色映射,origin=垂直轴方向)
import numpy as np
import matplotlib.pyplot as mp
n = 1000
x,y = np.meshgrid(np.linspace(-3,3,n),
                  np.linspace(-3,3,n))
z = (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)


mp.figure('Hot',facecolor='lightgray')
mp.title('Hot',fontsize = 20)

mp.xlabel('x',fontsize =14)
mp.ylabel('y',fontsize = 14)
# mp.xticks(x,x+1)
mp.tick_params(labelsize =10)
mp.grid(linestyle = ':')

mp.imshow(z,cmap='jet',origin='low')

mp.show()

这里写图片描述

绘制饼图
mp.pie(值列表, 间隙列表, 标签, 颜色列表, 格式串,shadow=是否带阴影, startangle=起始角度)
import matplotlib.pyplot as mp


mp.figure('Hot',facecolor='lightgray')
mp.title('Hot',fontsize = 20)

mp.pie(
    [26,17,21,29,11],
    [0.05,0.01,0.01,0.01,0.01],
    ['Tom','Pat','Jerry','Marry','Petter'],
    ['dodgerblue','orangered','limegreen','violet','gold'],
    '%d%%',shadow=True,startangle=90
)
mp.axis('equal')
mp.show()

这里写图片描述

其他设计和子图绘制

    mp.figure(图形对象名, figsize=窗口大小,dpi=分辨率, facecolor=颜色)  #设置图形对象
        mp.subplot(行数, 列数, 图号)   #设置子图的分布位置
    mp.subplot(2, 3, 1)
    mp.subplot(231)

猜你喜欢

转载自blog.csdn.net/patrisk/article/details/81409279