前言:
在我们开始建模之前,还有最后一个准备步骤需要完成——数据可视化!数据可视化对于数据分析/建模人员来说关键在让别人看得懂。也就是我们使用数据可视化来将一些我们觉得重要的信息进行展示,可以让非技术人员直观的对数据有一个认知。
本一小节内容将会介绍matplotlib、seaborn、plotly、bqplot四种可视化方式,其中matplotlib是底层的可视化三方包,可以自己进行深度定制。seaborn则是对matplotlib的封装,可以更便捷的生成可视化图像,不过模块化带来的就是可定制性不够强。plotly则是对matplotlib、seaborn的补充,因为上面两种可视化方法不能够动态的显示各个数据,所以plotly借助js将数据动态显示。而bqplot则是可以进行交互式可视化。如果你看过我前面的文章,就会发现我在进行讲解生成可交互的图像就是使用的bqplot。
介绍完毕,那么我们现在就走入数据可视化的入门教程吧。
一:基础图的可视化
基础图包括折线图、条形图、饼图、直方图、散点图、箱线图等等统计学中使用到的基础图形,下方是经常使用到的基础图的多种可视化方式及其对比。
1.1 折线图
折线图反映因变量随着自变量变化的变化趋势
1.1.1 matplotlib
import matplotlib as mpl
from matplotlib import pyplot as plt
import numpy as np
x = np.sort(np.random.randn(100))
y = np.sin(x)
# 方式1:使用pyplot的plot方法
plt.plot(x,y)
plt.show()
# 方式二:使用pyplot的subplots方法
fig,ax = plt.subplots()
ax.plot(x,y)
plt.show()
拟合完成后,我们发现图像很单调,既没有标题,也不知道每个轴的意义是什么,那么我们可以对这些图像添加我们需要的信息,这一部分在大部分的可视化包里是通用的,因此这一部分操作在后面属于通用。就不会再单独拎出来讲一遍了。
参数说明:
plt.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
# 注意,只有windows平台可以如此设置,linux是直接修改源文件达到目的,从饼图开始改用ubuntu,所以后面不会再添加中文设置
plt.rcParams['font.sans-serif']=['SimHei'] # 中文字体
plt.rcParams['axes.unicode_minus']=False # 不显示符号
plt.figure(figsize=(16,9)) # 设置图像大小
plt.plot(x,y,'gs-',label='sin-lne',linewidth=1) # 设置绘画格式
plt.xlabel('x-scaler') # 设置x轴标签
plt.ylabel('y-value') # 设置y轴标签
plt.xticks(x[::3],rotation=45) # 设置x轴显示那些数据
plt.title('sin-line') # 设置标题
plt.legend() # 显示图例
plt.show() # 展示图像
更多内容可以访问我在B站发布的视频 pyplot的一些注意事项和使用
1.1.2 seaborn
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei'] # 中文字体
plt.rcParams['axes.unicode_minus']=False # 不显示符号
x = np.sort(np.random.randn(40))
y = np.sin(x)
sns.lineplot(x,y)
plt.xlabel('这是x轴',fontdict={
'size':20})
plt.ylabel('这是y轴',fontdict={
'size':20})
plt.title('随便起个名字',fontdict={
'size':20})
plt.show()
1.1.3 plotly
import plotly as py
import plotly.graph_objs as go
from plotly.graph_objs import Scatter
import numpy as np
import pandas as pd
x = np.sort(np.random.randn(40))
y = np.sin(x)
# 将数据加载到追踪足迹中
trace = Scatter(x=x,y=y,mode='lines',name='一个正弦曲线',line=dict(width=2,color='green'))
data = [trace]
py.offline.iplot(data)
# 将布局追加到图像上
layout = go.Layout(title='这是一条正弦曲线'
,xaxis=dict(title='这是x轴的值')
,yaxis=dict(title='这是y轴的值')
,legend=dict(x=0,y=0.3,font=dict(size=5,color='black')))
fig = go.Figure(data=data,layout=layout)
py.offline.iplot(fig)
1.1.4 bqplot
from bqplot import pyplot as plt
x = np.sort(np.random.randn(40))
y = np.sin(x)
plt.plot(x,y)
plt.show()
plt.xlabel('这是我后面新加的x轴',fontsize)
plt.ylabel('我还想加个y轴')
plt.title('好像不加个标题说不过去')
plt.xlim(-3,3)
1.2 散点图
我们使用折线图将自变量、因变量的关系通过图形直接显示出来,但如果数据本身很杂乱,又没有关系怎么办呢?我们可以使用散点图查看数据点的各自分布关系。
1.2.1 matplotlib
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 中文字体
plt.rcParams['axes.unicode_minus']=False # 不显示符号
datas = make_blobs(n_samples=100,n_features=2,centers=[[1.,1.],[10.,1.]]) # 生成聚类数据
x = datas[0][:,0]
y = datas[0][:,1]
plt.figure(figsize=[16,12])
plt.scatter(x,y)
plt.xlabel('这是x轴')
plt.ylabel('这是y轴')
plt.xticks(np.arange(-2,12,1),rotation=45)
plt.title('这是两个聚类的散点图')
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jqqply4g-1589438783684)(https://upload-images.jianshu.io/upload_images/7398758-d3899136ec890b52.gif?imageMogr2/auto-orient/strip)]
1.2.2 seaborn
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei'] # 中文字体
plt.rcParams['axes.unicode_minus']=False # 不显示符号
# 生成数据
datas = make_blobs(n_samples=100,n_features=2,centers=[[1.,1.],[10.,1.]]) # 生成聚类数据
x = datas[0][:,0]
y = datas[0][:,1]
plt.figure(figsize