从零开始学习Matplotlib(一)

有深度学习需求的小伙伴请点击原文链接【教程】第一章:Matplot的基本用法,在线调试代码,玩转数据分析!

为什么使用 Matplotlib

Matplotlib 是一个非常强大的 Python 画图工具,可以帮助我们以直观的形式更好地了解数据。通过它,你可以画出线图、散点图、等高线图; 条形图、柱状图、3D 图形甚至是图形动画等等。下面是一些图例:

Image Name

Matplotlib 安装

使用Kesci平台的小伙伴可跳过该节~

在不同环境下,Matplotlib的安装方式各不相同。在Kesci平台使用Matplotlib的小伙伴们可以免去安装的过程,因为Kesic内置了100+各语言数据分析工具包,我们可以直接调用。

Linux

打开 Terminal 窗口, 输入以下内容:

# python 3+ 请复制以下在 terminal 中执行
sudo apt-get install python3-matplotlib
# python 2+ 请复制以下在 terminal 中执行
sudo apt-get install python-matplotlib

MacOS

打开 Terminal 窗口, 输入以下内容

# python 3+ 请复制以下在 terminal 中执行
pip3 install matplotlib

# python 2+ 请复制以下在 terminal 中执行
pip install matplotlib

Windows

Windows 下的安装最麻烦。我们一步步来:

1.确保你安装了 Visual Studio;

2.进入该网址: https://pypi.python.org/pypi/matplotlib/

3.找到一个适合你自己 python 版本的 wheel (.whl) 文件如下图所示并下载:
Image Name
我们可以通过文件名查找适合自己的.whl 文件,以matplotlib-1.5.3-cp35-cp35m-win32.whl (md5)为例:

  • 1.5.3 : 指代 matplotlib 库版本
  • cp35 : 指代 python 版本
  • win32 : 指代 Windows 32位系统
  • whl : 指代 wheel 文件

4.用 CMD 找到这个下载并保存的 .whl 文件目录, 然后利用 pip 安装. 以 matplotlib-1.4.3-cp35-none-win32.whl文件为例:

cd python_work   # 用 cd 去到你下载的文件目录

# 如果是 python 3+ 版本, 像下面一样
python -m pip3 install matplotlib-1.4.3-cp35-none-win32.whl

如果安装不成功, 还有一种方法可以简便安装所有科学运算模块。 可以搜索一下 Anaconda python。 Anaconda 是一个便捷的虚拟环境、包管理工具, 初学者可能并不理解为什么我们需要一个这样一个工具。打个比方,如果我们的电脑安装了 python2 ,那么 python3 的代码就无法在我们的机器上运行,而Anaconda可以帮助我们创建一个虚拟环境,在其下安装 python3 ,我们可以通过切换环境来适应不同版本的程序。

下面,我们将开始正式学习 Matplotlib 的使用!

基本用法

本章知识点归纳如下:

  • 导入模块:import matplotlib.pyplot as plt
  • 定义图像窗口:plt.figure()
  • 画图:plt.plot(x, y)
  • 定义坐标轴范围:plt.xlim()/plt.ylim()
  • 定义坐标轴名称:plt.xlabel()/plt.ylabel()
  • 定义坐标轴刻度及名称:plt.xticks()/plt.yticks()
  • 设置图像边框颜色:ax = plt.gca() ax.spines[].set_color()
  • 调整刻度位置:ax.xaxis.set_ticks_position()/ax.yaxis.set_ticks_position()
  • 调整边框(坐标轴)位置:ax.spines[].set_position()

导入模块

使用import导入模块matplotlib.pyplot,并简写成plt;使用import导入模块numpy,并简写成np

import matplotlib.pyplot as plt
import numpy as np

然后创建两组数据,使用np.linspace定义x:范围是(-3,3),个数是50,将产生一组(-3,3)内均匀分布的50个数;(x,y1)表示曲线1,(x,y2)表示曲线2。

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

定义图像窗口并画图

在画图前使用plt.figure()定义一个图像窗口:编号为3;大小为(8, 5);这两项参数可缺省。其中,num参数决定了程序运行后弹出的图像窗口名字,但在klab平台下不会显示。接着,我们使用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='--')
plt.show()

定义坐标轴名称及范围

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

plt.figure(num=3, figsize=(8, 5),)
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')
plt.show()

定义坐标轴刻度及名称

有时候,我们的坐标轴刻度可能并不是一连串的数字,而是一些文字,或者我们想要调整坐标轴的刻度的稀疏,这时,就需要使用plt.xticks()或者plt.yticks()来进行调整:首先,使用np.linspace定义新刻度范围以及个数:范围是(-1,2);个数是5。使用plt.xticks设置x轴刻度:范围是(-1,2);个数是5。使用plt.yticks设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3];对应刻度的名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’]。使用plt.show()显示图像。

plt.figure(num=3, figsize=(8, 5))
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'$really\ good$'])
plt.show()

在这里插入图片描述

设置图像边框颜色

细心的小伙伴可能会注意到,我们的图像坐标轴总是由上下左右四条线组成,我们也可以对它们进行修改:首先,使用plt.gca()获取当前坐标轴信息。使用.spines设置边框:右侧边框;使用.set_color设置边框颜色:默认白色; 使用.spines设置边框:上边框;使用.set_color设置边框颜色:默认白色;

plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()

在这里插入图片描述

调整刻度及边框位置

使用.xaxis.set_ticks_position设置x坐标刻度数字或名称的位置:bottom.(所有位置:top,bottom,both,default,none);使用.spines设置边框:x轴;使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)

plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ 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))
plt.show()

在这里插入图片描述
使用.yaxis.set_ticks_position设置y坐标刻度数字或名称的位置:left.(所有位置:left,right,both,default,none) 使用.spines设置边框:y轴;使用.set_position设置边框位置:x=0的位置;(位置所有属性:outward,axes,data) 使用plt.show显示图像.

plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ 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()

在这里插入图片描述

练一练

小伙伴们,以上就是matplotlib的基本用法,是不是比较简单呢?现在,请根据上述所学内容,画出直线 y = x-1, 线型为虚线,线宽为1,纵坐标范围(-2,1),横坐标范围(-1,2),横纵坐标在(0,0)坐标点相交。横坐标的 [-1,-0.5,1] 分别对应 [bad, normal, good]。请一定自己尝试一番再看下面的答案噢~

#答案
x = np.linspace(-1, 2, 50)
y = x - 1
plt.figure()
plt.plot(x,y, linewidth=1.0, linestyle='--')
plt.xlim((-1,2))
plt.ylim((-2,2))
plt.xticks([-1,-0.5,1],['bad', 'normal', 'good'])
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
plt.show()

在这里插入图片描述

上述文中所有代码部分都可以使用在线数据分析协作工具K-Lab复现,点击链接一键直达~

K-Lab提供基于Jupyter Notebook的在线数据分析服务,涵盖Python&R等主流编程语言,可满足数据科学家、人工智能工程师、商业分析师等数据工作者在线完成数据处理、模型搭建、代码调试、撰写分析报告等数据分析全过程。

猜你喜欢

转载自blog.csdn.net/weixin_43948810/article/details/84954620