python进行数据可视化分析实例

  数据可视化是将数据变成图表等形式,容易进一步分析数据之间的各种潜在信息和模式。

  python数据可视化的常用工具是matplotlib库(另外的工具:IPython QtConsole、IPython Notebook)。
一:matplotlib库架构

  matplotlib库分为三层架构,从最上层到最底层分别是:Scripting、Artist、Backend。

  Scripting层:即脚本层,用户进行数据分析、可视化操作都在这一层进行接口调用。

  Artist层:包含各种Aritist对象(如标签、标题、刻度等都是Artist对象的实例)。Figure对象--对应整个图表,包含一个轴(Axes)。Axes对象--对应了图表的内容,包含了多个轴(Axis)和图表的标题。Axis对象--显示轴的内容,包含了数值范围、刻度(Locator)、刻度值标签(Formatter)。

  Backend层:在底层实现图形元素的一个个类。
二:图表的基本组件
 

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
 
#pyplot模块是在matplotlib中
 
#subplot()将图形分为不同的绘图区域
#设置分区模式和当前子图,只有当前子图会受到命令的影响(第一个参数设置图形沿垂直方向分为几部分,第二个参数设置图形沿水平方向分为几部分,
#第三个参数设置可直接用命令控制的子图)
plt.subplot(211)
#传入x轴和y轴的值
plt.plot([1,2,3,4],[1,2,3,4],'b--',[3,4,5],[3,4.4,5.6],'g',linewidth=2.0)
 
#轴标签,描述轴的含义
plt.xlabel('x-label')
plt.ylabel('y-label')
 
plt.subplot(212)
plt.plot([1,2.1,3,4],[1,2,3.5,4.9],linewidth=2.0)
 
#添加图例
plt.legend(['tuli11'])
#定义x、y轴的取值范围
plt.axis([0,6,0,7])
#定义图表的坐标
plt.title('yyang title')
#在任意位置添加文本
plt.text(2.7,5.7,'new add words')
#添加网格
plt.grid(True)
 
#显示图表
plt.show()

三:图表类型

  线性图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
data={'first':[1,2,3,4],'second':[4,5,6,7],'third':[3,7,9,2]}
df=pd.DataFrame(data)
#传入x轴和y轴的值
plt.plot([1,2,3,4],df)
#轴标签,描述轴的含义
plt.xlabel('x-label')
plt.ylabel('y-label')
#显示图表
plt.show()

直方图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
#创建100个0-100的随机数
aa=np.random.randint(0,50,100)
#将样本数据分为15个面元,创建直方图
plt.hist(aa,bins=15)
#显示图表
plt.show()

条状图:

  垂直条状图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
#
index=['first','second','third','forth']
values=[2,9,6,5]
#创建条状图,yerr为标准差
plt.bar(index,values,yerr=[1,0.3,0.8,0],label='first')
#添加图例
plt.legend(['tuli1'])
#显示图表
plt.show()

  水平条状图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
#
index=['first','second','third','forth']
values=[2,9,6,5]
#创建条状图(水平)
plt.barh(index,values,yerr=[1,0.3,0.8,0],label='first')
#添加图例
plt.legend(['tuli1'])
#显示图表
plt.show()

多序列条状图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
#
index=np.arange(4)
bg=0.3
values1=[5,7,3,4]
values2=[6,6,4,5]
values3=[5,6,5,4]
#创建条状图(水平)
plt.bar(index,values1,)
plt.bar(index+bg,values2,color='g')
plt.bar(index+bg*2,values3,color='r')
#添加图例
plt.legend(['tuli1'])
#显示图表
plt.show()

DataFrame创建多序列条状图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
 
data={'first':[1,2,3,4],'second':[4,5,6,7],'third':[3,7,9,2]}
df=pd.DataFrame(data)
#创建条状图(多序列)
df.plot(kind='bar')
#显示图表
plt.show()

多序列堆积条状图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
series1=[1,6,3,4]
series2=[4,2,7,9]
series3=[5,3,1,7]
index=[1,2,3,4]
#创建条状图(堆积)
plt.bar(index,series1)
plt.bar(index,series2)
plt.bar(index,series3)
#显示图表
plt.show()

DataFrame创建多序列堆积条状图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
data={'first':[1,2,3,4],'second':[4,5,6,7],'third':[3,7,9,2]}
df=pd.DataFrame(data)
 
#创建条状图(DatafFrame多序列堆积)
df.plot(kind='bar',stacked='True')
#显示图表
plt.show()

饼图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
labels=['apple','sumsang','huawei','mi']
values=[11,20,50,19]
color=['red','blue','yellow','green']
explode=[0,0.2,0,0]
#创建饼图
plt.pie(values,labels=labels,colors=color,explode=explode,shadow=True)
#显示图表
plt.show()
import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
data={'first':[1,2,3,4],'second':[4,5,6,7],'third':[3,7,9,2]}
df=pd.DataFrame(data)
#DataFrame创建饼图
df['first'].plot(kind='pie')
#显示图表
plt.show()

等高线图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
#pyplot模块是在matplotlib中
 
x = np.linspace(-3,3,222)
y = np.linspace(-3,3,222)
#生成网格数据
X,Y=np.meshgrid(x,y)
#生成z轴的数据(等高线函数)
def fun(x,y):
    return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
#绘制等高线图
c=plt.contour(X,Y,fun(X,Y),colors='black',linewidth=0.5)
#将等高线分为8部分,填充颜色
plt.contourf(X,Y,fun(X,Y),8,cmap=plt.cm.hot)
#绘制等高线数据
plt.clabel(c,inline=1)
#
plt.colorbar()
#显示图表
plt.show()

极区图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
 
theta=np.arange(0.0,2*np.pi,2*np.pi/6)
raddii=np.array([2,3,5,1,6,7])
#定义每个区域的颜色
colors=['red','blue','green','yellow','black','plum']
 
#整个画图区域就是一个axes,通过Axes参数选项可以对画图区域的坐标点与大小进行设置,如未设置会自动帮接近覆盖整个figure的值。在一个figure中可添加多个Axes,就如一个画布中可以画一整副图,又或者可以画四宫图等等。axes参数设置如下:
#plt.axes([x,y,xs,ys]),其中x代表在X轴的位置,y代表在Y轴的位置,xs代表在X轴上向右延展的范围大小,yx代表在Y轴中向上延展的范围大小。
 
plt.axes([0.025,0.025,0.95,0.95],polar=True)
 
#绘制极区图
plt.bar(theta,raddii,color=colors,width=(2*np.pi/6))
#显示图表
plt.show()

  3D图:

  3D曲面图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d  import  Axes3D
 
figure=plt.figure()
axes=Axes3D(figure)
 
x=np.arange(-2,2,0.1)
y=np.arange(-2,2,0.1)
#定义函数
def fun(x,y):
    return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
 
X,Y=np.meshgrid(x,y)
#绘制3D曲面图
axes.plot_surface(X,Y,fun(X,Y),cmap=plt.cm.hot)
#以不同视角观察曲面图
axes.view_init(elev=30,azim=125)
#显示图表
plt.show()

3D散点图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d  import  Axes3D
 
#定义含有xyz坐标的数据集
x1=np.random.randint(20,30,40)
y1=np.random.randint(40,50,40)
z1=np.random.randint(10,30,40)
 
x2=np.random.randint(50,700,40)
y2=np.random.randint(10,70,40)
z2=np.random.randint(27,51,40)
 
x3=np.random.randint(60,90,40)
y3=np.random.randint(40,50,40)
z3=np.random.randint(34,55,40)
 
figure=plt.figure()
axes=Axes3D(figure)
#绘制3D散点图
axes.scatter(x1,y1,z1)
axes.scatter(x2,y2,z2)
axes.scatter(x3,y3,z3)
#显示图表
plt.show()

3D条状图:

import numpy as np
import  pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d  import  Axes3D
 
fig=plt.figure()
ax=Axes3D(fig)
#定义x轴的坐标xs,y轴的坐标zs,z轴的坐标ys
for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]):
    xs = np.arange(20)
    ys = np.random.rand(20)
    cs=c
 
    ax.bar(xs, ys, zs=z, zdir='y', color=cs, alpha=0.8)
 
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
#显示图表
plt.show()

 

你可能感兴趣的:(python)