数据分析从0到1----Matplotlib篇(一)

简介: 数据分析从0到1----Matplotlib篇

前言

本文要求阅读者拥有一定的Python编程基础,基于Numpy的ndarray数组配合Matplotlib这个Python可视化软件包来完成数据可视化.编程平台使用的是jupyter,因此要求读者拥有anaconda环境,本文的代码均基于anaconda-5.3.0

Numpy篇

Pandas篇

Anaconda下载

图表类型

常见的图表有条形图,直方图,散点图,饼状图等等.不同的图表用于描述不同类型的数据.

例如柱状图用于描述不同类型数据之间的某一属性的关系,直方图用于描述同一类型数据在连续区间上的值的变化.

散点图则更适合反映出变量间的关系.饼状图用于描述某一数据占总和的比率.

什么是Matplotlib?

Matplotlib-API

菜鸟教程-Matplotlib

  • Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
  • Matplotlib 可以用来绘制各种静态,动态,交互式的图表。
  • Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。
  • Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
  • Matplotlib依托于Python,借助Python强大的可扩展性,使其支持各种平台,并且能够根据Numpy ndarray数组进行图像绘制,且使用简单,代码清晰易懂。
  • Matplotlib基于Matlab并且基于面向对象这一思想。
  • Matplotlib实现了几乎完全是自主控制的图形定义功能。

折线图

首先再jupyter里导入matplotlib和numpy的包(下文统称plt和np)

from matplotlib import pyplot as plt #导入模块
import numpy as np  

如果版本不一样,没关系,你可以使用你的版本,当然你也可以在cmd中输入conda update metplotlib进行版本升级

下文有些部分可能会使用这种语法,可能有部分人用的少,我讲解一下

这种语法其实就是:

在for循环中,遍历的索引的值其实是可以作为另一语句的参数的,例如这里 %i 就代表把遍历的i的值作为 '日期%s’的参数传递进去,因此最终循环十次就可以得到下面这种情况

之后就是首先了解一些简单的函数

plot

plot函数用于绘制折线图

plot讲解

plt.plot(x, y, color='red', alpha=0.3,linestyle='-', linewidth=5, marker='o' , markeredgecolor='r', markersize='20’,markeredgewidth=10)

比较特殊的是,plot这个函数并不是必要的一定要传入x,y,也可以之传入一个参数,那么这个参数将会作为y被解析,而x则代表的是y的长度-1,即 x可以省略,默认[0,…,N-1]递增,N为y轴的元素个数例如:

plt.xticks(np.arange(12),np.arange(12))
plt.title('y=x^2,x∈[0,11]')
plt.plot(np.arange(12)**2) # 只传入y

可以发现我并没有传入x,y而可以发现x轴的刻度其实就是y轴上数据个数-1(这里我是用xticks显式标注了一下,你也可以去掉看效果).如果只传入一个参数,那么这个参数被解析为y轴上的值,而不是x轴的,因此这个图他的x轴和y轴表示的分别是:x轴—>len(y轴)-1, y轴—>x^2,x∈[0,11]

rcParams,xlabel,title

rcParams,这是一个参数字典,我们可以对对应的参数进行设置,例如设置字体等

这里重点介绍rcParams

  • plt.rcParams[‘figure.figsize’]=(8.0,4.0) #设置figure_size英寸
  • plt.rcParams['figure.dpi] = 300 #分辨率默认的像素:[6.0,4.0],分辨率为72,图片尺寸为432x288·
  • 指定dpi=100,图片尺寸为600*400
  • 指定dpi=300,图片尺寸为1800*1200

xlabel和ylabel则用来设置x和y轴的轴名称

title则用来设置当前画布的名称

plot用于描绘一个简单的2D关系图

x = np.arange(-50,51) 
y=x**2
z=x
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为中文黑体
plt.rcParams['axes.unicode_minus'] = False # 关闭unicode的负号配置 去掉这句话要报错
plt.rcParams['figure.dpi'] = 100 # 分辨率设置
plt.rcParams['figure.figsize'] = (3,2) # 英寸设置
plt.title('y关于x的二次方') # 设置图表名
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.plot(x,y) # 第一个matplotlib程序
plt.plot(x,z) # 一个画布中可以描绘多条线

xticks

仅仅使用以上参数,我们将很难表述一些其他关系模型

可以发现x轴完全模糊,不知其意,因此我们需要对轴刻度进行设置

设置x轴和y轴的刻度

matplotlib. pyplot.xticks(ticks=None,labels=None,**kwargs)

matplotlib. pyplot.yticks(ticks=None,labels=None,**kwargs)

参数:

ticks:此参数是xticx位置的列表。和一个可选参数。如果将一个空列表作为参数传递,则它将删除所有xticks,其显示的刻度数随传递的数组范围进行变化,列表中的元素的数据将被作为索引来设置x轴刻度,例如传递一个range(0,10,2)

表示的是显示10个刻度,但是每隔1个刻度才会显示一次刻度的名称

label:此参数包含放置在给定刻度线位置的标签。它是一个可选参数。

**kwargs:此参数是文本属性,用于控制标签的外观

 rotation:旋转角度如:rotation=45

 color:颜色如:color=“red”

#每个时间点的销量绘图
times =['2015/6/26','2015/8/1','2015/9/6','2015/10/12','2015/11/17',' 2015/12/23','2016/1/28','2016/3/4',
        '2016/5/15','2016/6/20', '2016/7/26', '2016/8/31', '2016/10/6', '2016/11/11','2016/12/17']
#随机出销量
sales =np. random. randint(500,2000, size=len(times))
# 支出
expend = np.random.randint(700,3000,size=len(times))
plt.xticks(range(0,len(times)),labels=['%s-'%s for s in times],rotation='45') # 显示全部刻度,并且翻转45度
#绘制图形
plt.plot(times, sales,label='收入') # label用于设置图例说明
plt.plot(times,expend,label='支出') 
plt.legend(loc='upper left')# 默认会使用每个图形的label值作为图例中的说明
for x,y in zip(times,sales): # zip表示
    plt.text(x,y,'%s元'%y)
for x,y in zip(times,expend):
    plt.text(x,y,'%s元'%y)

例如这里,第一个参数传递一个数组,这个数组的长度对应的就是刻度数,labels表示的是要显示的刻度的名称,如果不传递,就使用默认的刻度名称,rotation这个代表的是旋转角度

也可以单独传递一个要显示的刻度名称的数组

show

该方法用于显示所有打开的图形,而在jupyter模式下,默认就会给我们显现图形,因此我们不需要手动的调用,但是如果在cmd的环境下,那么我们就需要手动调用这个方法了,可以发现使用show方法调用出来的图像,有许多操作可以执行,放大缩小保存等,那么如何让我们在jupyter这个环境中也拥有这种效果呢?

Jupyter Notebook %matplotlib notebook魔法命令

%matplotlib notebook

legend

plt.legend(loc)

  • loc表示图例显示的位置
    什么是图例?
    图例是集中于地图一角或者一侧的地图上各种符号和颜色所代表内容与指标的说明,有助于更好的认识地图.
#每个时间点的销量绘图
times =['2015/6/26','2015/8/1','2015/9/6','2015/10/12','2015/11/17',' 2015/12/23','2016/1/28','2016/3/4',
        '2016/5/15','2016/6/20', '2016/7/26', '2016/8/31', '2016/10/6', '2016/11/11','2016/12/17']
#随机出销量
sales =np. random. randint(500,2000, size=len(times))
# 支出
expend = np.random.randint(700,3000,size=len(times))
plt.xticks(range(0,len(times)),rotation='45') # 显示全部刻度,并且翻转45度
#绘制图形
plt.plot(times, sales,label='收入') # label用于设置图例说明
plt.plot(times,expend,label='支出') 
plt.legend()# 默认会使用每个图形的label值作为图例中的说明

我们还能对图例所存在的位置进行设置

plt.legend(loc='upper left')# 设置图例位置为左上角

loc代表了图例在整个坐标轴平面中的位置(一般选取’best’这个参数值)

  • 第一种:默认是"best",图例自动安家’在一个坐标面内的数据图表最少的位置
  • 第二种: loc = 'XXX’分别有0: ‘best’(自动寻找最好的位置)

text

plt. text(x,y,string, fontsize=15, verticalalignment="top", horizontalalignment="right")

  • x,y:表示坐标值上的值
  • string:表示说明文字
  • fontsize:表示字体大小
  • verticalalignment: (va)垂直对齐方式,参数:[ ‘center’ i ‘top’ | ‘bottom’ / ‘baseline’]
  • horizontalalignment: (ha)水平对齐方式,参数:[ ‘center’ | ‘right’ | ‘left’ ]

当前函数用于设置每个点上显示的数据,首先前两个参数用于指定到某一个具体的点上,然后string参数表示这个点要显示的值

python的for循环中的zip

#每个时间点的销量绘图
times =['2015/6/26','2015/8/1','2015/9/6','2015/10/12','2015/11/17',' 2015/12/23','2016/1/28','2016/3/4',
        '2016/5/15','2016/6/20', '2016/7/26', '2016/8/31', '2016/10/6', '2016/11/11','2016/12/17']
#随机出销量
sales =np. random. randint(500,2000, size=len(times))
# 支出
expend = np.random.randint(700,3000,size=len(times))
plt.xticks(range(0,len(times)),rotation='45') # 显示全部刻度,并且翻转45度
#绘制图形
plt.plot(times, sales,label='收入') # label用于设置图例说明
plt.plot(times,expend,label='支出') 
plt.legend(loc='upper left')# 默认会使用每个图形的label值作为图例中的说明
for x,y in zip(times,sales): # zip表示
    plt.text(x,y,'%s元'%y) # %进行格式化取值
for x,y in zip(times,expend):
    plt.text(x,y,'%s元'%y)

grid

plt. grid(True,linestyle = " --" ,color = "gray", linewidth = "0.5", axis = 'x')

显示网格

  • linestyle:线型
  • color:颜色
  • linewidth:宽度
  • axis: x,y, both,显示x/y两者的格网
x = np.linspace(-np.pi,np.pi,256,endpoint=True)
c,s = np.cos(x),np.sin(x)
plt.plot(c)
plt.plot(s)
plt.grid(True,linestyle="-",color='gray',linewidth='0.5',axis='both')
# 显示网格
# linestyle:线性
# color:颜色
# linewidth:宽度
# axis:x,y,both,显示x/y两者的网格

gca(get current axes)

当前方法用于获取matplotlib中的坐标轴,也就是上图中对应的四条把cosx和sinx框起来的线.

使用gca可以对这四根线进行各种操作

x = np.linspace(-np.pi,np.pi,256,endpoint=True)
c,s = np.cos(x),np.sin(x)
# 获取坐标轴对象
axes = plt.gca()
#通过坐标轴spines,确定top,bottom,left,right(分别表示上下左右)
axes.spines['right'].set_color('none')
axes.spines['top'].set_color('none')
# axes:0.0-1.0之间的值,整个轴上的比例
axes.spines['left'].set_position(('axes',0.5))
#移动下轴到指定位置
# 'data'表示按数值挪动,其后数字代表挪动到Y轴的刻度值
axes.spines['bottom'].set_position(('data',0.0))
plt.plot(c)
plt.plot(s)

图形对象的创建

plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True,**kwargs)

参数说明:

num:图像编号或名称,数字为编号,字符串为名称

figsize:指定figure的宽和高,单位为英寸;

dpi:定绘图对象的分辨率,即每英寸多少个像素,缺省值为72

facecolor:背景颜色

edgecolor:边框颜色

frameon:是否显示边框

在Matplotlib中,面向对象编程的核心思想是创建图形对象(figure object)。通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个axes对象(即绘图区域)。

Matplotlib-提供了matplotlib.figure图形类模块,它包含了创建图形对象的方法。通过调用pyplot模块中 figure()函数来实例化figure 对象。

x=np.arange(10)
y=x
plt.figure('f1',figsize=(2,2),dpi=100,facecolor='gray')
plt.plot(x,y)


相关文章
|
2月前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
49 1
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
77 2
|
2月前
|
存储 数据可视化 数据挖掘
揭秘!Matplotlib与Seaborn联手,如何让Python数据分析结果一目了然,惊艳全场?
在数据驱动时代,高效直观地展示分析结果至关重要。Python中的Matplotlib与Seaborn是两大可视化工具,结合使用可生成美观且具洞察力的图表。本文通过分析某电商平台的商品销量数据集,展示了如何利用这两个库揭示商品类别与月份间的销售关系及价格对销量的影响。首先使用Matplotlib绘制月份销量分布直方图,再借助Seaborn的箱线图进一步探索不同类别和价格区间下的销量稳定性。
63 10
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
48 2
|
2月前
|
数据可视化 数据挖掘 Python
逆袭之路!Python数据分析新手如何快速掌握Matplotlib、Seaborn,让数据说话更响亮?
在数据驱动时代,掌握数据分析技能至关重要。对于Python新手而言,Matplotlib和Seaborn是数据可视化的两大利器。Matplotlib是最基本的可视化库,适合绘制基础图表;Seaborn则提供高层次接口,专注于统计图形和美观样式。建议先学Matplotlib再过渡到Seaborn。快速上手Matplotlib需多实践,示例代码展示了绘制折线图的方法。Seaborn特色功能包括分布图、关系图及分类数据可视化,并提供多种主题和颜色方案。两者结合可实现复杂数据可视化,先用Seaborn绘制统计图,再用Matplotlib进行细节调整。熟练掌握这两者,将显著提升你的数据分析能力。
46 4
|
2月前
|
数据可视化 数据挖掘 Python
惊呆了!Python数据分析师如何用Matplotlib、Seaborn秒变数据可视化大师?
在数据驱动时代,分析师们像侦探一样在数字海洋中寻找线索,揭示隐藏的故事。数据可视化则是他们的“魔法棒”,将复杂数据转化为直观图形。本文将带你探索Python数据分析师如何利用Matplotlib与Seaborn这两大神器,成为数据可视化大师。Matplotlib提供基础绘图功能,而Seaborn在此基础上增强了统计图表的绘制能力,两者结合使数据呈现更高效、美观。无论是折线图还是箱形图,这两个库都能助你一臂之力。
43 4
|
2月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【9月更文挑战第2天】数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
56 5
|
3月前
|
数据可视化 数据挖掘 API
Python数据分析:数据可视化(Matplotlib、Seaborn)
数据可视化是数据分析中不可或缺的一部分,通过将数据以图形的方式展示出来,可以更直观地理解数据的分布和趋势。在Python中,Matplotlib和Seaborn是两个非常流行和强大的数据可视化库。本文将详细介绍这两个库的使用方法,并附上一个综合详细的例子。
|
4月前
|
数据可视化 数据挖掘 Python
数据界的颜值担当!Python数据分析遇上Matplotlib、Seaborn,可视化美出新高度!
【7月更文挑战第24天】在数据科学领域,Python的Matplotlib与Seaborn将数据可视化升华为艺术,提升报告魅力。Matplotlib作为基石,灵活性强,新手友好;代码示例展示正弦波图的绘制与美化技巧。Seaborn针对统计图表,提供直观且美观的图形,如小提琴图,增强数据表达力。两者结合,创造视觉盛宴,如分析电商平台销售数据时,Matplotlib描绘趋势,Seaborn揭示类别差异,共塑洞察力强的作品,使数据可视化成为触动人心的艺术。
62 7
|
4月前
|
数据可视化 数据挖掘 Python
惊呆了!Python数据分析师如何用Matplotlib、Seaborn秒变数据可视化大师?
【7月更文挑战第24天】在数据驱动时代,分析师穿梭数字海洋揭示故事,数据可视化如魔法棒般将复杂数据转化成直观图形。Matplotlib与Seaborn成为黄金搭档:前者作为基础绘图库提供高度定制化选项;后者在其上构建,简化复杂图表绘制并增强美观度。两者结合,助力分析师高效完成任务。
35 6

热门文章

最新文章