Matplotlib随记1

Matplotlib概况

在我们进行机器学习分析的时候,通常需要将我们所需要的结果进行图像化表示出来,以方便我们可以更加形象的看到数据变化大趋势。在我进行寻找相应的工具时,我发现了Matplotlib是一个相当好的工具,主要是因为Matplotlib有很强大的功能,它可以为我们汇出各种美丽的图形,比如线图,散点图,等高线图,条形图,柱状图,3D图形,甚至是动画图像等等,我们可以根据自己的需求绘出自己所需要的图形。比如说,以下几个图形就是我们通过Matplotlib进行绘制的

     

Matplotlib安装

俗话说,“工欲善其事必先利其器”,在学习matplotlib之前,必先安装好matplotlib相关环境,我用的是ubuntu16.04系统,安装相对比较简单。打开控制台窗口,在窗口中输入:

#python 3+ 请使用以下代码
$ sudo apt-get install python3-matplotlib
#python 2+ 请使用以下代码
$ sudo apt-get install  python-matplotlib

在安装好matplotlib之后,我们就可以尽兴的翱翔在matplotlib的海洋里面了

matplotlib基本用法

首先我们要使用import 导入matplotlib,在使用matplotlib时,我们通常不需要导入matplotlib整个模块,而是只需导入matplotlib中的pyplot这一个模块即可,并简写成plt;使用import 导入模块numpy,并简写成np

import matplotlib.pyplot as plt
import numpy as np

使用np.linspace定义x:范围是(-1,1);个数是50,仿真一位数据组(x,y)表示曲线1

x=np.linspace(-1,1,50)
y=2*x + 1

使用plt.figure定义一个图像窗口,使用plt.plot画(x,y)曲线。使用plt.show显示图像

plt.figure()
plt.plot(x,y)
plt.show()

完整代码如下:

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-1,1,50)
y=2*x + 1
plt.figure()
plt.plot(x,y)
plt.show()

绘成的图像如下:

figure线条

在上面的基础上,使用plt.figure()定义一个图像窗口:编号为3;大小为(8,5)。使用plt.plot画(x,y2)曲线。使用plt.plot画(x,y1)曲线,曲线的颜色属性(color)为红色;曲线的宽度(linewidth)为1.0;曲线的类型(linestyle)为虚线。使用plt.show显示图像

plt.figure(num=3,figsize=(8,5),)
plt.plot(x,y2)
plt.plot(x,y1,color=‘red‘,linewidth=1.0,linestyle=‘--‘)

完成代码为:

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y1=2*x +1
y2=x**2

plt.figure()
plt.plot(x,y1)

plt.figure(num=3,figsize=(8,5),)
plt.plot(x,y2)
plt.plot(x,y1,color=‘red‘,linewidth=1.0,linestyle=‘--‘)
plt.show()

其产生的图像为:

设置坐标轴

下面主要是介绍如何在matplotlib中如何设置坐标轴的范围,单位长度,替代文字等等

使用plt.figure定义一个图像窗口,使用plt.plot画(x,y2)曲线。使用plt.plot画(x,y1)曲线,曲线的颜色属性(color)为红色;曲线的宽度(linewidth)为1.0;曲线的类型(linestyle)为虚线

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color=‘red‘,linewidth=1.0,linestyle=‘--‘)

使用plt.xlim设置x坐标轴范围:(-1,2);使用plt.ylim设置y坐标轴范围:(-2,3);使用plt.xlable设置x坐标轴名称:‘I am X‘;使用plt.ylabel设置y坐标轴名称:‘I am y‘;

plt.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel(‘I am x‘)
plt.ylabel(‘I am y‘)

使用np.linspace定义范围及个数:范围是(-1,2);个数是5.使用print函数打印出新定义的范围。使用plt.xticks设置x轴刻度:范围是(-1,2);个数是5

new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks)

使用plt.yticks设置y轴刻度以及名称:刻度为[-2,-1.8,-1,1.22,3];对应刻度的名称为[‘really bad‘,‘bad‘,‘normal‘,‘good‘,‘really good‘].使用plt,show显示图像。

plt.yticks([-2,-1.8,-1,1.22,3],[r‘$really\ bad$‘,r‘$bad$‘,r‘$normal$‘,r‘$good$‘,r‘$eally\ good$‘])

使用plt.gca获取当前坐标轴的信息。使用.spines设置边框:右侧边框;使用.set_color设置边框颜色:默认白色;使用.spines设置边框:上边框;使用.set_color设置边框颜色:默认白色;

ax=plt.gca()
ax.spines[‘right‘].set_color(‘none‘)
ax.spines[‘top‘].set_color(‘none‘)

下一步我们调整坐标轴。使用.xaxis.set_ticks_position设置x坐标刻度数字或名称的位置:bottom(所有位置:top,bottom,both,default,none)

ax.xaxis.set_ticks_position(‘bottom‘)

使用.spines设置边框:x轴;使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)

ax.spines[‘bottom‘].set_position((‘data‘,0))

使用.yaxis.set_ticks_position设置y坐标刻度数字或者名称的位置:left(所有位置:left,right,both,default,none)

ax.yaxis.set_ticks_position(‘left‘)

使用.spines设置边框:y轴;使用.set_position设置边框位置:x=0的位置;(位置所有属性:outward,axes,data)  使用plt.show显示图像

ax.spines[‘left‘].set_position((‘data‘,0))
plt.show()

全部代码如下:

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y1=2*x + 1
y2=x**2

plt.figure()
plt.plot(x,y2)
plt.plot(x,y1,color=‘red‘,linewidth=1.0,linestyle=‘--‘)

plt.xlim((-1,2))
plt.ylim((-2,3))
plt.xlabel(‘I am x‘)
plt.ylabel(‘I am y‘)

new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks)

plt.yticks([-2,-1.8,-1,1.22,3],[r‘$really\ bad$‘,r‘$bad$‘,r‘$normal$‘,r‘$good$‘,r‘$eally\ good$‘])

ax=plt.gca()
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.show()

结果如下:

legend 图例

在matplotlib中,我们通常使用其中的legend图例来帮助我们展示每个数据对应的图像名称,从而更好的让读者认识你的数据结构

在这里,我们对图中的两条线进行绘制,首先我们设置两条线的类型信息(蓝色实线和红色虚线)

l1,=plt.plot(x,y2,label=‘linear line‘)
l2,=plt.plot(x,y1,color=‘red‘,lineWidth=1.0,linestyle=‘--‘,label=‘square line‘)

legend将要显示的信息来自于上面代码中的label,所以我们只需要简单写一下代码,plt就能自动的为我们添加图例

plt.legend(loc=‘upper right‘)

其中,参数 loc=‘upper right‘ 表示图例将添加在图中的右上角

但是,有时候我们想调整图例的位置和名称,比如如果我们想单独修改之前的label信息,给不同类型的线条设置图例信息,我们可以在plt.legend中输入更多的参数。如果以以下这种形式添加legend,我们需要确保,在上面的代码plt.plot(x,y2,label=‘linear line‘)和plt.plot(‘x,y1,label=‘‘square line‘)中有用变量l1,l2分别存储起来。而且我们需要注意的是l1,l2要以逗号结尾,因为我们需要确保plt.plot()返回的是一个列表。

plt.legend(handles=[l1,l2],labels=[‘up‘,‘down‘],loc=‘best‘)

这样我们就能分别重新设置线条对应的label了

其中,‘loc‘参数有很多,‘best‘表示自动分配最佳位置,其余的如下:

‘best’:0,
‘upper right‘ : 1,
‘upper left‘ : 2,
‘lower left‘ : 3,
‘lower right‘ : 4,
‘right‘ : 5,
‘center left‘ : 6,
‘center right‘ : 7,
‘lower center‘ : 8,
‘upper center‘ : 9,
‘center‘ : 10,

这部分的完整代码如下:

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y1=2*x + 1
y2=x**2

plt.figure()

plt.xlim((-1,2))
plt.ylim((-2,3))

new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks)

plt.yticks([-2,-1.8,-1,1.22,3],[r‘$really\ bad$‘,r‘$bad$‘,r‘$normal$‘,r‘$good$‘,r‘$eally\ good$‘])

l1,=plt.plot(x,y2,label=‘linear line‘)
l2,=plt.plot(x,y1,color=‘red‘,lineWidth=1.0,linestyle=‘--‘,label=‘square line‘)
#plt.legend(loc=‘upper right‘)
plt.legend(handles=[l1,l2],labels=[‘up‘,‘down‘],loc=‘best‘)
plt.show()

所产生的图像如下:

Annotation标注

在我们画图形需要对某些特殊地方进行标注时,我们可以使用annotation.matplotlib中的annotation中的两种方法,一种是plt里面的annotate,另外一种直接用plt里面的text来写标注

首先,我们绘制一条直线

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y=2*x + 1

plt.figure(num=1,figsize=(8,5),)
plt.plot(x,y,)

之后,我们再移动坐标轴的位置

ax=plt.gca()
ax.spines[‘right‘].set_color(‘none‘)
ax.spines[‘top‘].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))

之后,我们再标注出(x0,y0)的位置信息,用plt.plot([x0,x0,],[0,y0,],‘k--‘,linewidth=2.5)画出一条垂直于x轴的虚线

x0=1
y0=2*x0 + 1;
plt.plot([x0,x0,],[0,y0,],‘k--‘,linewidth=2.5)
plt.scatter([x0, ],[y0, ],s=50,color=‘b‘)

再之后,我们对图像添加一些注释,比如我们可以对(x0,y0)这个点添加注释

plt.annotate(r‘$2x+1=%s$‘ % y0 , xy = (x0,y0) , xycoords=‘data‘ , xytext=(+30,-30) ,
    textcoords=‘offset points‘ , fontsize=16 ,
    arrowprops=dict(arrowstyle=‘->‘,connectionstyle="arc3,rad=.2"))

我们也可以对文本中添加一些需要的注释

plt.text(-3.7,3,r‘$This\ is\ the\ some\ text. \mu\ \sigma_i\ \alpha_t$‘,
    fontdict={‘size‘:16,‘color‘:‘r‘})

其中,-3.7和3是选取在文本中添加注释的位置,空格需要用到转字符\,fontdict设置字体。

其中,本部分的全部源码是:

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y=2*x + 1

plt.figure(num=1,figsize=(8,5),)
plt.plot(x,y,)

ax=plt.gca()
ax.spines[‘right‘].set_color(‘none‘)
ax.spines[‘top‘].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))

x0=1
y0=2*x0 + 1;
plt.plot([x0,x0,],[0,y0,],‘k--‘,linewidth=2.5)
plt.scatter([x0, ],[y0, ],s=50,color=‘b‘)

plt.annotate(r‘$2x+1=%s$‘ % y0 , xy = (x0,y0) , xycoords=‘data‘ , xytext=(+30,-30) ,
    textcoords=‘offset points‘ , fontsize=16 ,
    arrowprops=dict(arrowstyle=‘->‘,connectionstyle="arc3,rad=.2"))

plt.text(-3.7,3,r‘$This\ is\ the\ some\ text. \mu\ \sigma_i\ \alpha_t$‘,
    fontdict={‘size‘:16,‘color‘:‘r‘})

plt.show()

所产生的图片是:

tick能见度

当我们生成图片太多的时候,往往会出现图片的内容较多,相互掩盖的情况。我们可以通过设置相关内容的透明度来使图片更加容易观察,也即是通过本节中的bbox参数设置来调节图像信息。

参考之前的例子,我们可以绘制出图片的基本信息:

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y=0.1*x

plt.figure()
plt.plot(x,y,linewidth=10)
plt.ylim(-2,2)

ax=plt.gca()
ax.spines[‘right‘].set_color(‘none‘)
ax.spines[‘top‘].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))

然后我们对遮挡的图像调节相关透明度,在本例中设置x轴和y轴的刻度数字来进行透明度设置

for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor=‘white‘,edgecolor=‘None‘,alpha=0.7))

其中,label.set_fontsize(12)用来重新调整字体大小,set_bbox设置目的内容中关于透明度参数,facecolor调节box前景色,edgecolor设置边框,在本处我们将边框设置成无,alpha用来设置透明度。

在这一阶段,其全部源码为:

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-3,3,50)
y=0.1*x

plt.figure()
plt.plot(x,y,linewidth=10)
plt.ylim(-2,2)

ax=plt.gca()
ax.spines[‘right‘].set_color(‘none‘)
ax.spines[‘top‘].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))

for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor=‘white‘,edgecolor=‘None‘,alpha=0.7))

plt.show()

所绘出来的图片为:

时间: 2024-10-29 02:00:23

Matplotlib随记1的相关文章

PyQt5 结合 matplotlib 时,如何显示其 NavigationToolbar

本文目的:展示 PyQt5 结合 matplotlib 时,如何显示其 NavigationToolbar. 本人搜遍所有网络无果,没办法,查看PyQt5源代码,最终才搞明白...特此留记. 〇.PyQt4 与 PyQt5 导入 NavigationToolbar 时的区别(去掉两个agg) # PyQt4 版本(网传) #from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToo

matplotlib+pyqt4 内容整理

最近学习了matplotlib的内容,在这里做一些总结. 参考:vamei博客(Python的也可以看其教程)http://www.cnblogs.com/vamei/archive/2013/01/30/2879700.html http://reverland.org/python/2012/09/07/matplotlib-tutorial/ http://myshare.dscloud.me/scipydoc/matplotlib_intro.html#axis(这个文章很好的解释了fi

Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的垂直搜索引擎,专门为用户提供团购.优惠券的检索:同时存在一个通用的搜索引擎,比如百度,通用搜索引擎希望能够识别出一个Query是否具有O2O检索意图,如果有则调用O2O垂直搜索引擎,获取结果作为通用搜索引擎的结果补充. 我们的目的是学习出一个分类器(classifier),分类器可以理解为一个函数,

微信运动记步原理,及刷步数方法大揭密

随着"微信运动"功能的开启,朋友圈里燃起了每天刷步的热情,每天为了争夺运动封面第一名,不惜下班还在楼下多绕一圈儿再回家.那么你们都知道微信运动是如何记录我们每日行程步数的吗?这个数据到底准不准确呢?今天小编就为大家来一个大揭密. 原理: 手机内置了振动传感器或协助处理器,根据这些设备的震动频率来储存数据.简单地说,就是人在步行时重心都有一点上下移动,传感器和协作器感应到这种重心移动并进行记数. 设备: iPhone 5S/6/6 Plus三款苹果手机因为自带M7/M8协处理器,无需任何

matplotlib刻度设置详解

今天给大家总结一下matplotlib绘图时如何设置刻度,希望对正在学习matplotlib的同学有帮助. Tick locating and formatting 该模块包括许多类以支持完整的刻度位置和格式的配置.尽管 locators 与主刻度或小刻度没有关系,他们经由 Axis 类使用来支持主刻度和小刻度位置和格式设置.一般情况下,刻度位置和格式均已提供,通常也是最常用的形式. 默认格式 当x轴数据绘制在一个大间隔的一个小的集中区域时,默认的格式将会生效.为了减少刻度标注重叠的可能性,刻度

python matplotlib 绘图

饼图 import matplotlib.pyplot as plt # The slices will be ordered and plotted counter-clockwise. labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' sizes = [15, 30, 45, 10] colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral'] explode = (0, 0.1, 0, 0) #

.NET Core爬坑记 1.0 项目文件

前言: 之所以要写这个系列是因为在移植项目到ASP.NET Core平台的过程中,遇到了一些“新变化”,这些变化有编译方面的.有API方面的,今天要讲的是编译方面的一些问题.我把它们整理后分享出来,以便各位博友不要再遇到这些坑. 在Dotnet Core RC2版本中,project.json 管理着整个项目,包括编译文件.依赖包管理.版本信息.平台依赖与发布等功能. 关于项目中引用: 比如我们一般看到Project.json中一般会有如下内容: "dependencies": { &

matplotlib

前导: 安装 numpy http://sourceforge.net/projects/numpy/files/ http://sourceforge.net/projects/numpy/files/NumPy/1.7.2/numpy-1.7.2-win32-superpack-python2.7.exe/download 安装 SciPy http://sourceforge.net/projects/scipy/files/ http://sourceforge.net/projects

最美的时光在路上 - 记第一次深马

昨天跑了深圳马拉松的半马,这是我的第二马,家门口跑马还是有些兴奋的,就因为这个兴奋劲儿,凌晨两点才入睡,朦朦胧胧睡了三个小时,5点半就不得不爬起来洗洗涮涮了,吃了准备好的早餐,坐第一班地铁奔赴市民中心,到达市民中心,已经是人山人海了,各方跑友汇聚于此.话说,这两年跑步是越来越火,我是觉得和现在各种跑步APP的兴起有关,有了这些记步APP,跑了步晒下,朋友们点点赞,这些正向反馈让你跑步的心气就有更足了,其他运动可能很难通过什么APP有这样的体验. 时间紧,存了包,就赶紧往起点一点点的挤(人多,真的