Matplotlib 基础

文章目录

  • Matplotlib 基础
    • 安装
    • matplotlib 架构
    • matplotlib的基本用法
    • 一.线性图
    • 二.柱状图
    • 三.散点图
    • 四.等高线图
    • 五.处理图片
    • 六.3D图

数据可视化非常重要,因为错误或不充分的数据表示方法可能会毁掉原本很出色的数据分析工作。

matplotlib 库是专门用于开发2D图表(包括3D图表)的,突出优点:

  • 使用起来极为简单
  • 以渐进、交互式方式实现数据可视化
  • 表达式和文本使用LaTeX排版
  • 对图像元素控制力强
  • 可输出PNG、PDF、SVG和EPS等多种格式

安装

conda install matplotlib

或者

pip install matplotlib

matplotlib 架构

matplotlib 的主要任务之一,就是提供一套表示和操作图形对象(主要对象)以及它的内部对象的函数和工具。其不仅可以处理图形,还提供事件处理工具,具有为图形添加动画效果的能力。有了这些附加功能,matplotlib 就能生成以键盘按键或鼠标移动触发的事件的交互式图表。

从逻辑上来讲,matplotlib 的整体架构为3层,各层之间单向通信:

  • Scripting (脚本)层
  • Artist (表现)层
  • Backend (后端)层

matplotlib的基本用法

import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 30) # 在区间内生成30个等差数
y = np.sin(x)
print('x = ', x)
print('y = ', y)
x =  [-3.14159265 -2.92493109 -2.70826953 -2.49160797 -2.2749464  -2.05828484-1.84162328 -1.62496172 -1.40830016 -1.19163859 -0.97497703 -0.75831547-0.54165391 -0.32499234 -0.10833078  0.10833078  0.32499234  0.541653910.75831547  0.97497703  1.19163859  1.40830016  1.62496172  1.841623282.05828484  2.2749464   2.49160797  2.70826953  2.92493109  3.14159265]
y =  [-1.22464680e-16 -2.14970440e-01 -4.19889102e-01 -6.05174215e-01-7.62162055e-01 -8.83512044e-01 -9.63549993e-01 -9.98533414e-01-9.86826523e-01 -9.28976720e-01 -8.27688998e-01 -6.87699459e-01-5.15553857e-01 -3.19301530e-01 -1.08119018e-01  1.08119018e-013.19301530e-01  5.15553857e-01  6.87699459e-01  8.27688998e-019.28976720e-01  9.86826523e-01  9.98533414e-01  9.63549993e-018.83512044e-01  7.62162055e-01  6.05174215e-01  4.19889102e-012.14970440e-01  1.22464680e-16]

一.线性图

1.画一条曲线

plt.figure() # 创建一个新的窗口
plt.plot(x, y) # 画一个x与y相关的曲线
plt.show()# 显示图像

2.画多条曲线以及添加坐标轴和标签

import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 100) # 在区间内生成21个等差数
y = np.sin(x)
linear_y = 0.2 * x + 0.1plt.figure(figsize = (8, 6)) # 自定义窗口的大小plt.plot(x, y)
plt.plot(x, linear_y, color = "red", linestyle = '--') # 自定义颜色和表示方式plt.title('y = sin(x) and y = 0.2x + 0.1') # 定义该曲线的标题
plt.xlabel('x') # 定义横轴标签
plt.ylabel('y') # 定义纵轴标签plt.show()

3.指定坐标范围 and 设置坐标轴刻度

import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 100) # 在区间内生成21个等差数
y = np.sin(x)
linear_y = 0.2 * x + 0.1plt.figure(figsize = (8, 6)) # 自定义窗口的大小plt.plot(x, y)
plt.plot(x, linear_y, color = "red", linestyle = '--') # 自定义颜色和表示方式plt.title('y = sin(x) and y = 0.2x + 0.1') # 定义该曲线的标题
plt.xlabel('x') # 定义横轴标签
plt.ylabel('y') # 定义纵轴标签
plt.xlim(-np.pi, np.pi)
plt.ylim(-1, 1)# 重新设置x轴的刻度
# plt.xticks(np.linspace(-np.pi, np.pi, 5))
x_value_range = np.linspace(-np.pi, np.pi, 5)
x_value_strs = [r'$\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$', r'$\pi$']
plt.xticks(x_value_range, x_value_strs)
plt.show() # 显示图像

4.定义原点在中心的坐标轴

import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)
linear_y = 0.2 * x + 0.1plt.figure(figsize = (8, 6)) plt.plot(x, y)
plt.plot(x, linear_y, color = "red", linestyle = '--') plt.title('y = sin(x) and y = 0.2x + 0.1')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(-np.pi, np.pi)
plt.ylim(-1, 1)# plt.xticks(np.linspace(-np.pi, np.pi, 5))
x_value_range = np.linspace(-np.pi, np.pi, 5)
x_value_strs = [r'$\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$', r'$\pi$']
plt.xticks(x_value_range, x_value_strs)ax = plt.gca() # 获取坐标轴
ax.spines['right'].set_color('none') # 隐藏上方和右方的坐标轴
ax.spines['top'].set_color('none')# 设置左方和下方坐标轴的位置
ax.spines['bottom'].set_position(('data', 0)) # 将下方的坐标轴设置到y = 0的位置
ax.spines['left'].set_position(('data', 0)) # 将左方的坐标轴设置到 x = 0 的位置plt.show() # 显示图像

5.legend图例

使用xticks()yticks()函数替换轴标签,分别为每个函数传入两列数值。第一个列表存储刻度的位置,第二个列表存储刻度的标签。

import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 100)
y = np.sin(x)
linear_y = 0.2 * x + 0.1plt.figure(figsize = (8, 6)) # 为曲线加上标签
plt.plot(x, y, label = "y = sin(x)")
plt.plot(x, linear_y, color = "red", linestyle = '--', label = 'y = 0.2x + 0.1') plt.title('y = sin(x) and y = 0.2x + 0.1')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(-np.pi, np.pi)
plt.ylim(-1, 1)# plt.xticks(np.linspace(-np.pi, np.pi, 5))
x_value_range = np.linspace(-np.pi, np.pi, 5)
x_value_strs = [r'$\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$', r'$\pi$']
plt.xticks(x_value_range, x_value_strs)ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0)) # 将曲线的信息标识出来
plt.legend(loc = 'lower right', fontsize = 12)
plt.show()


legend方法中的loc 参数可选设置

位置字符串 位置编号 位置表述
‘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 正中间

二.柱状图

使用的方法:plt.bar

import numpy as np
import matplotlib.pyplot as pltplt.figure(figsize = (16, 12))
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([3, 5, 7, 6, 2, 6, 10, 15])
plt.plot(x, y, 'r', lw = 5) # 指定线的颜色和宽度x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([13, 25, 17, 36, 21, 16, 10, 15])
plt.bar(x, y, 0.2, alpha = 1, color='b') # 生成柱状图,指明图的宽度,透明度和颜色
plt.show()


有的时候柱状图会出现在x轴的俩侧,方便进行比较,代码实现如下:

import numpy as np
import matplotlib.pyplot as pltplt.figure(figsize = (16, 12))
n = 12
x = np.arange(n) # 按顺序生成从12以内的数字
y1 = (1 - x / float(n)) * np.random.uniform(0.5, 1.0, n)
y2 = (1 - x / float(n)) * np.random.uniform(0.5, 1.0, n)# 设置柱状图的颜色以及边界颜色
#+y表示在x轴的上方 -y表示在x轴的下方
plt.bar(x, +y1, facecolor = '#9999ff', edgecolor = 'white')
plt.bar(x, -y2, facecolor = '#ff9999', edgecolor = 'white')plt.xlim(-0.5, n) # 设置x轴的范围,
plt.xticks(()) # 可以通过设置刻度为空,消除刻度
plt.ylim(-1.25, 1.25) # 设置y轴的范围
plt.yticks(())# plt.text()在图像中写入文本,设置位置,设置文本,ha设置水平方向对其方式,va设置垂直方向对齐方式
for x1, y in zip(x, y2):plt.text(x1, -y - 0.05, '%.2f' % y, ha = 'center', va = 'top')
for x1, y in zip(x, y1):plt.text(x1, y + 0.05, '%.2f' % y, ha = 'center', va = 'bottom')
plt.show()

三.散点图

import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2
plt.scatter(x, y, s = area,c = colors, alpha = 0.8)plt.show()

四.等高线图

import matplotlib.pyplot as plt
import numpy as npdef f(x, y):return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
X, Y = np.meshgrid(x, y)  # 生成网格坐标 将x轴与y轴正方形区域的点全部获取
line_num = 10 # 等高线的数量plt.figure(figsize = (16, 12))#contour 生成等高线的函数
#前俩个参数表示点的坐标,第三个参数表示等成等高线的函数,第四个参数表示生成多少个等高线
C = plt.contour(X, Y, f(X, Y), line_num, colors = 'black', linewidths = 0.5) # 设置颜色和线段的宽度
plt.clabel(C, inline = True, fontsize = 12) # 得到每条等高线确切的值# 填充颜色, cmap 表示以什么方式填充,hot表示填充热量的颜色
plt.contourf(X, Y, f(X, Y), line_num, alpha = 0.75, cmap = plt.cm.hot)plt.show()

五.处理图片

import matplotlib.pyplot as plt
import matplotlib.image as mpimg # 导入处理图片的库
import matplotlib.cm as cm # 导入处理颜色的库colormapplt.figure(figsize = (16, 12))
img = mpimg.imread('image/动漫1.jpg')# 读取图片
print(img) # numpy数据
print(img.shape) # plt.imshow(img, cmap = 'hot')
plt.colorbar() # 得到颜色多对应的数值
plt.show()
[[[ 11  23  63][ 12  24  64][  1  13  55]...[  1  12  42][  1  12  42][  1  12  42]][[ 19  31  71][  3  15  55][  0  10  52]...[  0  11  39][  0  11  39][  0  11  39]][[ 22  34  74][  3  15  55][  7  19  61]...[  0  11  39][  0  11  39][  0  11  39]]...[[ 84 125 217][ 80 121 213][ 78 118 214]...[ 58  90 191][ 54  86 187][ 53  85 186]][[ 84 124 220][ 79 119 215][ 78 117 218]...[ 55  87 188][ 55  87 188][ 55  87 188]][[ 83 121 220][ 80 118 219][ 83 120 224]...[ 56  88 189][ 58  90 191][ 59  91 192]]]
(728, 516, 3)


利用numpy矩阵得到图片

import matplotlib.pyplot as plt
import matplotlib.cm as cm # 导入处理颜色的库colormap
import numpy as npsize =  8
# 得到一个8*8数值在(0, 1)之间的矩阵
a = np.linspace(0, 1, size ** 2).reshape(size, size)plt.figure(figsize = (16, 12))
plt.imshow(a)
plt.show()

六.3D图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 导入Axes3D对象fig = plt.figure(figsize = (16, 12))
ax = fig.add_subplot(111, projection = '3d') # 得到3d图像x = np.arange(-4, 4, 0.25)
y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(x, y) # 生成网格
Z = np.sqrt(X ** 2 + Y ** 2)# 画曲面图              # 行和列对应的跨度         # 设置颜色
ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = plt.get_cmap('rainbow'))
plt.show()

超详细——matplotlib基础相关推荐

  1. 硬肝!超详细matplotlib基础介绍!!!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:逐梦er https://zhumenger.blog.cs ...

  2. matplotlib的优点_超详细matplotlib基础介绍!!!

    (给Python开发者加星标,提升Python技能) 来源:逐梦er https://zhumenger.blog.csdn.net/article/details/106530281 [导语]:出色 ...

  3. linux入门_Linux超详细0基础入门篇(一)

    首先要感谢大康老师对我在Linux操作系统上的教导. 今天来讲一下用途广泛的Linux的基础入门教程 仅仅是做入门使用,如果想更加深入的学习那就需要自己做探索了. 本次例子使用的是kali linux ...

  4. (超详细)0基础利用python调用Hadoop,云计算

    第一章配置Hadoop 前言 本次我们python+大数据的作业我选择附加一 利用hadoop+python实现,最近考完试有时间来完成. 这次我们用到的是Hadoop,利用python进行操作首先我 ...

  5. [STM32] Stm32f103c8t6+RC522 实现读卡写卡功能(超详细,零基础,小白)

    本篇文章内容总结下来就是 读卡            使用默认密码读卡所有扇区所有块的数据 写ID            使用默认密码读取卡一的0扇区的第一块数据并写入到卡二的0扇区的第一块里 密码读 ...

  6. 如何安装和搭建wordpress个人网站(超详细+零基础)

    概述 如果还有不了解宝塔面板怎么使用的小伙伴,可以看下我总结的系列教程,保证从新手变老鸟: [建站流程科普] 个人和企业搭建网站基本流程及六个主要步骤 [宝塔面板精选教程汇总] 宝塔面板教程(1)基于 ...

  7. python画龙猫_宫崎骏王国——《龙猫》小梅(超详细零基础马克笔手绘教程)

    大家好,我是刀刀.我特别喜欢宫崎骏的动漫,也特别喜欢用马克笔画画!我想和大家一起来,把宫崎骏笔下可爱的角色都画一遍,如果你也感兴趣,请和我同行. 这节课我们来先学一学零基础马克笔,第二课.我们一起来画 ...

  8. python超详细零基础 bs4解析之爬取唯美图片

    文章目录 前言 前言 本篇文章主要介绍使用bs4解析来爬取某网站上的唯美高清大图,涉及到的零碎知识较多,详细易懂,适合新手小白爬虫入门. 思路如下: ①拿到主页面的源代码,然后提取到子页面的链接地址h ...

  9. python 大学教授整理_剑桥大学教授用时35天亲自整理,Python超详细的基础笔记

    python简介 python是一种面向对象的解释型计算机程序设计语言,python的是吉多·范罗苏姆(Guido van Rossum)于1989年发明 任何语言都有优缺点,python也不例外,p ...

最新文章

  1. C++知识:__stdcall、__cdcel和__fastcall三者的区别
  2. 【Vegas原创】导出Excel时,如何将数字格式转为文本格式?(07.12.13 Update)
  3. 【MM配置】评估和账户确定(Valuation Account Determination) - 1
  4. Nacos如何支撑阿里内部数十万服务注册压力?
  5. iview选择月份 月初月末 时间戳格式
  6. HDOJ1394 Minimum Inversion Number【线段树】
  7. 【专题三】如何考量虚拟化的投资回报率?——服务器虚拟化的阴暗面
  8. 入门教程:.NET开源OpenID Connect 和OAuth解决方案IdentityServer v3 介绍 (一)
  9. java 骰子游戏_蓝桥杯-骰子游戏-java
  10. 这应该是把计算机网络五层模型讲的最好是文章了,看不懂你打我
  11. 怎样恢复手机oracle默认窗口,通达信恢复默认版面,Effects界面如何恢复初始默认设置...
  12. 移动通信网络规划:5G业务解析
  13. 运维python要掌握到什么程度_《运》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  14. 机器学习笔记——神经网络与深度学习
  15. Android常用第三方支付
  16. Android_插值器
  17. mysql中日期相减_Excel日期和时间运算
  18. 论文查重时图片会不会被检测?
  19. HoloLens新版OpenXR
  20. ITM机制-不用串口也能printf

热门文章

  1. HDU2159 研发费用背包
  2. visual studio 代码分析利器 FxCop
  3. PMP第五版第一次考试相关提醒
  4. 【题解】SCOI2009围豆豆
  5. SpringMVC_跟踪请求
  6. SpringMVC框架搭建
  7. jsvascript 学习 二 操作符
  8. Github 简明教程 - 操作标签
  9. 2013年1月7日学习内容
  10. 解决系统关机变重启故障