Python数据可视化

2020-05-17  本文已影响0人  Ly3911

一、Matplotlib绘图
1.点图、线图
2.直方图
3.等值线图
4.三维曲面图
5.条形图
6.饼图
7.气泡图(散点图)
二、Seabon图例
1.数据分布可视化
2.线性相关图
3.分类数据可视化
三、Pandas可视化功能
1.时间序列图(折线图)
2.平行坐标图和安德鲁曲线

实例

# coding: utf-8
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

##设置字体
from matplotlib.font_manager import FontProperties
font = {'family' : 'Times New Roman','weight' : 'normal','size'   : 23}
##Jupyter显示图像需要添加以下两句代码
%matplotlib inline 
##在Jupyter嵌入显示
%config InlineBackend.figure_format="retina"  
##在屏幕中显示高清图片

##绘制一个圆形散点图
t=np.arange(1,10,0.05)
x=np.sin(t)
y=np.cos(t)
##定义一个窗口
plt.figure(figsize=(8,5))
##绘制一条线
plt.plot(x,y,"r-*")

##使坐标轴相等
plt.axis("equal")
plt.ylabel("sin")
plt.xlabel("cos")
plt.title("round")

##显示图像
plt.show()

1.点图、线图

##subplot()绘制多个子图
import numpy as np
import matplotlib.pyplot as plt

x1=np.linspace(0.0,5.0)
x2=np.linspace(0.0,5.0)

y1=np.cos(2*np.pi*x1)*np.exp(-x1)
y2=np.cos(2*np.pi*x2)

##绘制第一个子图
plt.subplot(2,1,1)
plt.plot(x1,y1,'yo-')
plt.title('A tale of subplots')
plt.ylabel('Damped oscillation')
##绘制第二个子图
plt.subplot(2,1,2)
plt.plot(x2,y2,'r.-')
plt.xlabel('time(s)')
plt.ylabel('Undamped')

plt.show()

一个Figure对象包含多个Axes(子图)
subplot(numRows,numCols,plotNum)


subplot(numRows,numCols,plotNum)
##plot函数调用方式如下
plt.plot(x,y,format_string,**kwargs)
参数说明:
   x表示x轴数据,列表/数组,可选,绘制多条曲线是各x参数不能省略;
   y表示y轴数据,列表/数组;
   format_string表示控制曲线的格式字符串;
    **kwargs表示第二组或更多(x,y,format_string)

2.直方图

##直方图
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

##数据示例
mu=100
sigma=15
x=mu+sigma*np.random.randn(10000)
print("x:",x.shape)
#获得一维正态分布数组

##直方图条数
num_bins=50
#绘制直方图
n,bins,patches=plt.hist(x,num_bins,normed=1,facecolor='green',alpha=0.5)
#添加一个最佳拟合的曲线
y=mlab.normpdf(bins,mu,sigma) ##返回关于数据的pdf数值(概率密度函数)

plt.plot(bins,y,'r--')
plt.xlabel('Smarts')
plt.ylabel('Probability')
#在图中添加公式/字符需使用Latex语法$-$
plt.title('Histogram of IQ:$\mu=100$,$\sigma=15$')
#调整图像间距,防止y轴数值与label重合
plt.subplots_adjust(left=0.15)
plt.show()
print("bind:\n",bins)
正态分布直方图
##hist函数格式
n,bins,patches=plt.hist(arr,bins=10,normed=0,facecolor='black',edgecolor='black',alpha=1,histtype='bar')
参数说明:
 arr:直方图一维数组x
 bins:直方图柱数,默认10
 normed:是否将得到的直方图向量归一化,默认0
 facecolor:直方图颜色
 edgecolor:直方图边框颜色
 alpha:透明度
 histtype;直方图类型,有'bar','barstacked','step','stepfilled'几种
返回值:
 n:直方图向量,是否归一化由normed设定
 bins:返回各bin的区间范围
 patches:返回每一个bin包含的数据,是个列表(list)

3.等值线图
相等数值点的连线表示连续分布且逐渐变化的数量特征,三维图像在二维上表示;

##matplotlib绘制三维曲线
import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

##生成数据
delta=0.2
x=np.arange(-3,3,delta)
y=np.arange(-3,3,delta)
X,Y=np.meshgrid(x,y)
Z=X**2+Y**2

x=X.flatten() #返回一维数组,该函数只适用于numpy对象(array/mat)
y=Y.flatten()
z=Z.flatten()
fig=plt.figure(figsize=(12,6))
ax1=fig.add_subplot(121,projection='3d')
ax1.plot_trisurf(x,y,z, cmap=cm.jet, linewidth=0.01) ##cmap指颜色,jet表示:蓝青黄红
plt.title("3D")

ax2=fig.add_subplot(122)
cs=ax2.contour(X,Y,Z,15,cmap='jet',) #15表示等高线密度,数值越大,等高线数越多
ax2.clabel(cs,inline=True,fontsize=10,fmt='%1.1f')
plt.title("Contour")
plt.show()

4.三维曲面图

##三维曲面图+各轴的投影等高线
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm

fig=plt.figure(figsize=(8,6))
ax=fig.gca(projection='3d')

##生产三维数据
X,Y,Z=axes3d.get_test_data(0.05)
ax.plot_surface(X,Y,Z,rstride=8,cstride=8,alpha=0.3)
cset=ax.contour(X,Y,Z,zdir='z',offset=-100,cmap=cm.coolwarm)
cset=ax.contour(X,Y,Z,zdir='x',offset=-40,cmap=cm.coolwarm)
cset=ax.contour(X,Y,Z,zdir='y',offset=40,cmap=cm.coolwarm)

ax.set_xlabel('X')
ax.set_xlim(-40,40)
ax.set_ylabel('Y')
ax.set_ylim(-40,40)
ax.set_zlabel('Z')
ax.set_zlim(-100,100)
plt.show()

5.条形图 Bar Chart

##条形图
import numpy as np
import matplotlib.pyplot as plt

##生成数据
n_groups=5  ##组数

##平均分和标准差
means_men=(20,35,30,35,27)
std_men=(2,3,4,1,2)
means_women=(25,32,34,20,25)
std_women=(3,5,2,3,3)

##条形图
fig,ax=plt.subplots()
index=np.arange(n_groups)
bar_width=0.35

opacity=0.4 ##透明度
error_config={'ecolor':'0.3'}
##第一类条形图
rects1=plt.bar(index,means_men,bar_width,
              alpha=opacity,
              color='b',
              yerr=std_men,
              error_kw=error_config,
              label='Men')
##第二类条形图
rects2=plt.bar(index+bar_width,means_women,bar_width,
              alpha=opacity,
              color='r',
              yerr=std_women,
              error_kw=error_config,
              label='Women')
plt.xlabel('Group')
plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(index+bar_width,('A','B','C','D','E'))
plt.legend()
##自动调整subplot的参数指定的填充区
plt.tight_layout()
plt.show()

6.饼图

##饼图
import matplotlib.pyplot as plt

##切片按顺时针方向排列并绘制
labels='Frogs','Hogs','Dogs','Logs' ##标注
sizes=[15,30,45,10] ##大小
colors=['yellowgreen','gold','lightskyblue','lightcoral'] ##颜色
explode=(0,0.1,0,0) ##表示第二个块0.1从圆中分离
##绘制饼图
plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=90)
plt.axis('equal')
plt.show()

7.气泡图(散点图)

##气泡图
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris ##获取鸢尾花数据包

##导入数组
iris=load_iris()
iris
df_data=pd.DataFrame(iris.data,columns=iris.feature_names)
df_data['target']=iris.target
df_data.head()

##作图
fig,ax=plt.subplots()
##设置气泡颜色
##colors=["#FFFF01"]

#创建气泡图SepalLength为x,SepalWidth为y,同时设置PetalLength为气泡大小,并设置颜色透明度
ax.scatter(df_data['sepal length (cm)'],df_data['sepal width (cm)'],
           s=df_data['sepal length (cm)']*60,alpha=0.6) ##color=colors
ax.set_xlabel('sepal length (cm)')
ax.set_xlabel('sepal width (cm)')
ax.set_title('sepal length (cm)*60')

##显示网格
ax.grid(True)
fig.tight_layout()
plt.show()

二、Seabon图例
1.数据分布可视化

##准备工作
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris ##获取鸢尾花数据包

##数据转化为DataFrame
iris=load_iris()
df=pd.DataFrame(iris.data,columns=iris.feature_names)
df['target']=iris.target

##数据可视化
import numpy as np
import pandas as pd
from scipy import stats,integrate
import matplotlib.pyplot as plt

##在Jupyter中显示图像
%matplotlib inline 
##显示高清图片
%config InlineBackend.figure_format='retina'
import seaborn as sns
sns.set(color_codes=True)
df.head()
##1.直方图和密度函数
##distplot()函数默认绘出数据的直方图和核密度
sns.distplot(df["petal length (cm)"],bins=15)
plt.show()
##2.散点图和直方图
##jointplot()函数同时绘制散点图和直方图
sns.jointplot(x="sepal length (cm)",y="sepal width (cm)",data=df,height=8)
plt.show()
##3.分组散点图
##FacetGrid()标记不同种类
sns.FacetGrid(df,hue='target',height=8).map(plt.scatter,"sepal length (cm)","sepal width (cm)").add_legend()
##4.六边形图
sns.axes_style("white")
sns.jointplot(x="sepal length (cm)",y="petal length (cm)",data=df,kind="hex",color="k")
plt.show()
##5.二维核密度估计图
g=sns.jointplot(x="sepal length (cm)",y="petal length (cm)",data=df,kind="kde",color="m")
##添加散点图
g.plot_joint(plt.scatter,c="w",s=30,linewidth=1,marker="+")
g.ax_joint.collections[0].set_alpha(0)
##6.1矩阵散点图-用于考察多个变量间相关关系,快速发现多个变量主要相关性
g=sns.PairGrid(df)
g.map(plt.scatter)
##6.2对角线绘制不同函数,显示单变量分布
g=sns.PairGrid(df)
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter)
##7.盒形图
plt.figure(figsize=(8,6))
sns.boxplot(x="target",y="sepal width (cm)",data=df)
plt.title("Boxplot")
plt.show()

三、Pandas可视化功能

1.时间序列图

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
##1.1Pandas绘制折线图
ts=pd.Series(np.random.randn(1000),index=pd.date_range('1/1/2000',periods=1000))
ts=ts.cumsum()
ts.plot()
plt.show()
##1.2多条折线图
ts2=pd.DataFrame(np.random.randn(1000,4),index=pd.date_range('1/1/2000',periods=1000),columns=list('ABCD'))
ts2=ts2.cumsum()
plt.figure()
ts2.plot()
plt.show()

2.平行坐标图和安德鲁曲线

##数据源接上面鸢尾花数据
from pandas.plotting import parallel_coordinates
from pandas.plotting import andrews_curves

##parallel_coordinates 平行坐标图 对于高维几何和多元数据可视化
plt.figure(figsize=(6,4))
parallel_coordinates(df,"target")
plt.title("parallel_coordinates")

##andrews_curves 安德鲁曲线 平滑版本平行坐标图 
plt.figure(figsize=(6,4))
andrews_curves(df,"target")
plt.title("andrews_curves")
plt.show()
上一篇下一篇

猜你喜欢

热点阅读