作者:Walker
我们本篇文章讲的数据可视化是面向开发人员的,是利用python中一些可视化库如:matplotlib或是seaborn通过对数据可视化,来分析数据表格中各维度间的关系或是数据分布的特性,从而有助于我们更好的理解数据,帮助我们进行下一步数据分析或是为数据建模提供方向。本篇文章的方法并非是面向用户做数据展示或面向企业做数据可视化,这种情况下大家可以尝试使用Echarts或Tableau等数据展示工具。本文将分为matplotlib可视化和seaborn可视化两个部分。
一、Matplotlib数据可视化:
Matplotlib是一个Python的2D绘图库,开发者使用Matplotlib仅需要几行代码便可以轻松绘图,生成柱状图、散点图、折线图、盒图、琴图等。
首先,matplotlib的安装非常的简单,Windows环境下我们可以通过pip install matplotlib直接完成安装,而Linux环境可以使用sudo pip install matplotlib完成安装。接着我们使用import matplotlib.pyplot as plt导入matplotlib库,便可以开始绘图了。
完整的绘图程序如下所示,包括图例、坐标轴、取值范围、刻度值、标题、注解等内容。
程序1:
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
x = np.arange(0., 10, 0.2)
y1 = np.cos(x)
y2 = np.sin(x)
y3 = np.sqrt(x)
plt.plot(x, y1, color=’blue’, linewidth=1.5, linestyle=’-‘, marker=’.’, label=r’ y=cosx y = c o s x ’)
plt.plot(x, y2, color=’green’, linewidth=1.5, linestyle=’-‘, marker=’*’, label=r’ y=sinx y = s i n x ’)
plt.plot(x, y3, color=’m’, linewidth=1.5, linestyle=’-‘, marker=’x’, label=r’ y=x−−√ y = x ’)
ax = plt.subplot(111)
ax.spines[‘right’].set_color(‘none’) # 去掉右边的边框线
ax.spines[‘top’].set_color(‘none’) # 去掉上边的边框线
ax.xaxis.set_ticks_position(‘bottom’)
ax.spines[‘bottom’].set_position((‘data’, 0))
ax.yaxis.set_ticks_position(‘left’)
ax.spines[‘left’].set_position((‘data’, 0))
plt.xlim(x.min()*1.1, x.max()*1.1)
plt.ylim(-1.5, 4.0)
plt.xticks([2, 4, 6, 8, 10], [r’2’, r’4’, r’6’, r’8’, r’10’])
plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0],
[r’-1.0’, r’0.0’, r’1.0’, r’2.0’, r’3.0’, r’4.0’])
plt.text(4, 1.68, r’ x∈[0.0, 10.0] x ∈ [ 0.0 , 10.0 ] ’, color=’k’, fontsize=15)
plt.text(4, 1.38, r’ y∈[−1.0, 4.0] y ∈ [ − 1.0 , 4.0 ] ’, color=’k’, fontsize=15)
plt.scatter([8,],[np.sqrt(8),], 50, color =’m’) # 使用散点图放大当前点
plt.annotate(r’ 22–√ 2 2 ’, xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color=’#090909’, arrowprops=dict(arrowstyle=’->’, connectionstyle=’arc3, rad=0.1’, color=’#090909’))
plt.title(r’ the function figure of cos(), sin() and sqrt() t h e f u n c t i o n f i g u r e o f c o s ( ) , s i n ( ) a n d s q r t ( ) ’, fontsize=19)
plt.xlabel(r’ the input value of x t h e i n p u t v a l u e o f x ’, fontsize=18, labelpad=88.8)
plt.ylabel(r’ y=f(x) y = f ( x ) ’, fontsize=18, labelpad=12.5)
plt.legend(loc=’up right’)
plt.grid(True)
plt.show()
散点图、曲线图、折线图、灰度图、饼状图、箱图、琴图等常用图形的绘制,也非常的简单,程序如下所示:
程序2:
x = np.random.normal(size=1000)
y = np.random.normal(size=1000)
plt.scatter(x,y)
程序3:
x = np.arange(-5,5,0.1)
y = x ** 2
plt.plot(x,y)y = np.random.normal(size=1000)
程序4:
x = np.random.normal(size=1000)
plt.hist(x, bins=100)
程序5:
import numpy as np
import matplotlib.pyplot as plt
labels = [“SH”, “BI”, “SZ”, “GD”]
facts = [20, 10, 30, 40]
explode = [0, 0, 0.02, 0]
plt.axes(aspect = 1)
plt.pie(x = facts, labels = labels, explode= explode, shadow= True)
plt.show()
程序6:
plt.boxplot(y)
二、Seaborn数据可视化:
Seaborn相较于matplotlib更加的方便、简单。因为Seaborn中自带了一些统计的包,它在画图的同时,会完成统计的拟合。而且Seaborn画图时的参数也更多,这样matplotlib可能很多行的代码,seaborn仅仅需要间的几行就能实现同样的效果。
Seaborn的安装也非常的简单,使用pip install seaborn直接安装即可,首先我们来介绍一些Seaborn中的基本绘图函数:折线图:plot()、散点图:lmplot()、柱状图:barplot()、联合分布图:jointplot()、琴图:violinplot()、箱式图:boxplot()、比较图:pairplot()等。常用的属性有hue:对数据按照不同的类型先做分组,再分别对每组数据绘图;col:用于多列数据都出现分组时;markers:用哪种符号对数据进行标注,Ci:是否开启置信区间;color、data、x、y等。
接下来我们通过两个案例来直观的比较一下seaborn和matplotlib的不同。
案例一:给定数据集航班乘客变化分析data = sns.load_dataset(“flights”),利用柱状图分析乘客在一年中各月份的分布情况。
Matplotlib版本:
per_month_distribute = data.groupby(‘month’).agg([np.mean, np.std])[‘passengers’]
_,axe=plt.subplots()
plt.rcParams[“figure.figsize”] = (12,8)
print(per_month_distribute)
plt.bar(range(12), per_month_distribute[‘mean’],color=’cadetblue’,label=’average’)
plt.errorbar(range(12), per_month_distribute[‘mean’],yerr=per_month_distribute[‘std’],ls=’none’,color=’darkslategray’, lw=5, label=’error’)
plt.xticks(range(12),per_month_distribute.index,fontsize=15,rotation=45)#把X轴上的字体旋转45度,以免重叠
plt.xlabel(‘Month of Year’,fontsize=20)
plt.ylabel(‘Passengers’,fontsize=20)
plt.legend([u”乘客量均值”, u”乘客量标准差”],fontsize=15) #把label标注的内容显示出来
plt.title(u’乘客在一年中各月份的分布’,fontsize=25)
axe.spines[‘top’].set_color(None)
axe.spines[‘right’].set_color(None)
plt.scatter(x,y)
Seaborn版本:
import seaborn as sns
sns.factorplot(x='month',y='passengers',data=data, kind='bar',size=8)
效果图:
案例二:给定数据集餐厅收取小费的情况:data = sns.load_dataset(“tips”),绘制分组柱状图分析性别+抽烟的组合因素对慷慨度的影响。
Matplotlib版本:
tmp_data=data.groupby([‘sex’,’smoker’])[‘tip’].agg([np.mean,np.std])
width = 0.2
_,axe=plt.subplots()
plt.bar([1,2],tmp_data[‘mean’].loc[‘Male’],width=width, label=’Male’)
plt.errorbar([1,2],tmp_data[‘mean’].loc[‘Male’],
yerr = tmp_data[‘std’].loc[‘Male’], ls =’none’,lw=4,color=’darkblue’,label=None)
plt.bar([x+width for x in [1,2]],tmp_data[‘mean’].loc[‘Female’],width=width,label=’Female’,color=’salmon’)
plt.errorbar([x+width for x in [1,2]],tmp_data[‘mean’].loc[‘Female’],
yerr=tmp_data[‘std’].loc[‘Female’],ls=’none’,lw=4,color=’darkred’,label=None)
plt.setp(axe, xticks=[1.1,2.1], xticklabels=[‘Yes’,’No’]) #设置横坐标参数
plt.legend(fontsize=15)
plt.xlabel(‘Smoker’,fontsize=15)
plt.ylabel(‘Tip’,fontsize=15)
plt.axis([0.7,2.7,0,5]) #移动坐标轴,[left,right,bottom,top],距离左右,上下边框的距离
plt.title(u’性别+抽烟的组合因素对慷慨度的影响’)
Seaborn版本:
sns.barplot(x='smoker',y='tip',data=tips,hue='sex')
效果图:
总结:通过上边的案例我们分别通过matplotlib和seaborn完成了数据可视化的操作,我么可以看到Seaborn封装的更好,使用起来更简单;但Matplotlib灵活性更高、功能也更加强大。学习Matplotlib和Seaborn更多的函数、图形的绘制,欢迎大家学习它们的官方手册,这里小编只是做了一个简单的常用整理。Matplotlib官方文档:http://www.matplotlib.org;
Seaborn官方手册:http://seaborn.pydata.org。