admin管理员组

文章数量:817343

python必备库 学习笔记 matplotlib

文章目录

    • Matplotlib
      • Matplotlib介绍
      • 为什么要学习Matplotlib
      • Matplotlib简单实例
      • Matplotlib图像结构
      • Matplotlib三层结构
        • 容器层
        • 辅助显示层
        • 图像层
        • 总结
        • 实例
      • 折线图与基础绘图功能
        • 折线图绘制与保存图片
      • 设置x、y轴
      • 中文乱码问题
      • 添加网格显示
      • 添加描述信息
      • 在原图上加一个图层
      • 创建多个绘图区
      • 绘制数学函数
      • 柱状图
      • 直方图
      • 散点图
      • 饼图
      • 最后

Matplotlib

Matplotlib介绍

  • Matplotlib专门用于开发2D图表(也支持3D图表),是一个画二维图表的python库
  • Matplotlib以渐进、交互方式实现数据可视化,使用起来简单

为什么要学习Matplotlib

  • Matplotlib能将数据进行可视化,更直观的呈现,帮助理解数据,方便选择更合适的分析方法
  • Matplotlib使数据更加客观,更具有说服力

Matplotlib简单实例

画一条简单直线

修改点的坐标即可画出折线图

Matplotlib图像结构

Matplotlib三层结构

容器层

容器层主要由Canvas(画板)、Figure(画布)、Axes(图表)组成。

  • Canvas位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布的工具,通常情况下,我们并不需要对Canvas特别的声明,当我们需要在其他模块调用Matplotlib模块绘图时,就需要声明Canvas,相当于我们在自家画画不用强调画板,出去写真时却需要带一块画板
  • Figure是Canvas上方的第一层,也是需要用户来操作的第一层,在绘图的过程中充当画布的角色。当我们对Figure大小、背景色彩进行设置的时候,就相当于选择画布大小、材质的过程。因此,每当我们绘图时,写的第一行就是创建Figure的代码。
  • Axes是应用层的第二层,在绘图的过程中相当于画布上的绘图区角色。一个Figure对象可以包含多个Axes对象,每个Axes都是一个独立的坐标系,绘图过程中的所有图像都是基于坐标系绘制的。

辅助显示层

辅助显示层为Axes内除根据数据画出的图像以外的内容,主要包括外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等。
该层的作用可使图像更加直观、更加容易理解,但对图像没有实质性的影响

图像层

图像层指的Axes内通过plot(折线图)、hist(柱状图)、contour(轮廓图)、bar(柱状图)、barbs、pie(饼图)等函数绘制出的图像。

总结

  • Canvas(画板)位于最底层,用户一般接触不到
  • Figure(画布)建立在Canvas之上
  • Axes(绘图区)建立在Figure之上
  • 坐标轴(axis)、图例(legend)等辅助显示层及图像层都是建立在Axes之上

实例

定义多个figure画多个图像

在一个figure中画多个图像

折线图与基础绘图功能

matplotlib.pyplot包含了一系列类似于matlab的画图函数,作用于当前图形(figure)的当前坐标系(axes)

折线图绘制与保存图片

  1. 绘制一个简单的折线图
  2. 设置画布属性与图片保存

设置图片的大小与清晰度

  • plt.figure(figsize(a,b),dpi=)
    • figsize 设置图形的大小,a 为图形的宽, b 为图形的高,单位为英寸
    • dpi 为设置图形每英寸的点数
    • 该函数返回一个figure对象

保存图片

  • plt.savefig(路径与名字)



注意 plt.show()会释放figure资源,如果在显示图像之后保存图片只能保存空图片

设置x、y轴

  • plt.xlim(*args,**kwargs)
    • 设置x轴显示的刻度范围
  • plt.ylim(*args,**kwargs)
    • 设置y轴显示的刻度范围

  • plt.xticks(x,**kwargs)
    • x : 要显示的新刻度值
  • plt.yticks(y,**kwargs)
    • y : 要显示的新刻度值

中文乱码问题

本意是显示0点,1点等,乱码就显示如下

下载中文字体(黑体,看准系统版本)

  • 下载SimHei字体(其他支持中文显示的字体也行)
  1. 安装字体
  • windows和mac中,双击安装

  • linux中,拷贝字体到/usr/share/fonts下

    sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
    
  1. 删除matplotlib缓存字体
  • Mac
    • 删除~/.matplotlib中的缓存文件
      cd ~/.matplotlib
      rm -r *
      
  • Linux
    • 删除~/.cache/matplotlib中的缓存文件
      cd ~/.cache/matplotlib
      rm -r *
      
  1. 修改配置文件matplotlibrc
  • Mac
    • 修改配置文件matplotlibrc
    vi ~/.matplotlib/matplotlibrc
    
    • 将文件内容修改为
    font.family		: sans-serif
    font.sans-serif		: SimHei
    axes.unicode	 : False
    
  • Linux
    • 修改配置文件matplotlibrc
    sudo find -name matplotlibrc
    
    • 返回结果
    ./.virtualenvs/ai/lib/python3.5/site-package/matplotlib/mpl-data/matplotlib
    
    • 将文件内容修改为
    font.family		: sans-serif
    font.sans-serif		: SimHei
    axes.unicode	 : False
    

添加网格显示

为了更加清楚地观察图像对应地值
plt.grid(True,linestyle=‘–‘,alpha=0.5)

  • True:代表是否添加网格
  • linestyle:网格线的格式
  • alpha:透明度

添加描述信息

  • plt.xlabel(str)
    • str : 要显示的x轴名称
  • plt.ylabel(str)
    • str : 要显示的y轴名称
  • plt.title(str)
    • str:图片的标题

在原图上加一个图层

一个图就是一个plot,需要加图层就是多定义一个plot

在图层上添加说明
plt.plot(,label=str)

  • str:直线的说明

plt.legend(loc=‘lower left’)

  • loc:图例显示的位置

创建多个绘图区

matplotlib.pyplot.subplots(nrows=1,ncols=1,**fig_kw)创建一个带有多个axes(坐标系/绘图区)的图

  • nrows:行数,默认是一行
  • ncols:列数,默认是一列

plt.函数名()相当于面向过程的画图方法,axes.set_函数名()相当于面向对象的画图方法

In

# 绘制0-12点的温度变化图
import matplotlib.pyplot as plt
#创建宽20高8英寸dpi为80的画布
figure,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)x=[0,1,2,3,4,5,6,7,8,9,10,11]#时间 x
y=[2,3,2,2,2,4,5,8,9,9,12,15]#温度 y
y1=[12,9,8,9,7,5,5,2,0,9,12,15]#温度 y1axes[0].plot(x,y,label='picture1') #绘制图像1
axes[1].plot(x,y1,label='picture2') #绘制图像2axes[0].legend(loc='lower left') #显示图例
axes[1].legend(loc='lower left') #显示图例#设置两个轴显示刻度
y_label=['{}℃'.format(i)for i in y]
x_label=['{}h'.format(i)for i in x]#添加网格
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)
#添加描述信息
axes[0].set_xlabel('time/h')
axes[0].set_ylabel('tempreture/℃')
axes[0].set_title('tempreture_change_picture')axes[1].set_xlabel('time/h')
axes[1].set_ylabel('tempreture/℃')
axes[1].set_title('tempreture_change_picture')axes[0].set_xticks(x,x_label)
axes[0].set_yticks(y,y_label)axes[1].set_xticks(x,x_label)
axes[1].set_yticks(y1,y_label)plt.show()

Out

绘制数学函数

画图之前先写出y的表达式

import numpy as np
import math
x=np.linspace(-1,1,1000)
y=-1*x*x #表达式yplt.figure(figsize=(20,8),dpi=80)#创建画布
plt.plot(x,y) #绘制图形
plt.grid() #添加网格
plt.show()

柱状图

  • 意义:能够一眼看出各个数据的大小,方便统计和对比数据之间的差别
  • mayplotlib.pyplot.bar(x,width,align=‘center’,**kwargs) 绘制柱状图
  • 用途:比较多组数据之间的差别
#绘制公司的第一月份和第一年的收入图
x=['company A','company B','company C','company D']
y_month=[1200,2100,4100,3110]
y_year=[5810,5120,8040,7410]
plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.bar([0,1,2,3],y_month,width=0.2,label='first month income',color=['r']) #绘制图形
plt.bar([0.2,1.2,2.2,3.2],y_year,width=0.2,label='first year income') #绘制图形
plt.legend()plt.xticks(range(4),x)
plt.title('company income table')
plt.grid() #添加网格
plt.show()

直方图

  • 组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数
  • 组距:每一组两个端点的差
  • 意义:直方图展示数据的分布
  • matplotlib.pyplot.hist(x,bins=None,normed=None,**kwargs)
    • x:画图的数据
    • bins:组数

x=[143,152,164,148,165,157,159,162,170,176,148,154,165,158,149,172,157,164,168,157]plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.hist(x,11)
plt.title('table')#标题
plt.xticks(range(min(x),max(x),3))
plt.show()

散点图

  • 意义:判断变量之间是否存在数量关联趋势,展示数据分布规律
  • matplotlib.pyplot.scatter() 绘制散点图
  • 用途:探究不同变量之间的内在关系

饼图

  • matplotlib.pyplot.pie(x,labels=,autopct=,colors)
  • x:数量
  • labels:每部分名称
  • autopct:占比显示指定%1.2f%%
  • colors:每部分颜色
name=['A','B','C','D','E','F']
count=[1250,900,850,749,1300,890]
plt.figure(figsize=(6,4),dpi=80)#创建画布
plt.pie(count,labels=name,colors=['r','b','y','g','c','m'],autopct='%1.2f%%')
plt.title('table')#标题
#如果图形不平整,加该行代码
#plt.axis('equal')
plt.show()

最后

可以关注一下我的公众号,最近开始写公众号,我会在上面分享一些资源和发布一些csdn上发布不了的干货

点个关注是对博主最大的支持

本文标签: python必备库 学习笔记 matplotlib