matplot基本功能详解

图形对象操作

填充操作

以某种颜色自动填充两条曲线的闭合区域.

mp.fill_between(x,               # x轴水平坐标sinx,           # sinx曲线的y坐标cosx,           # cosx曲线的y坐标sinx < cosx, # 填充条件为True时,执行填充操作color=''      # 颜色alpha=0.3      # 透明度
)

案例:绘制两条曲线: sinx=sin(x) cosx=cos(x/2) / 2 [0-8π]

import numpy as np
import matplotlib.pyplot as mpx = np.linspace(0, 8 * np.pi, 1000)
sinx = np.sin(x)
cosx = np.cos(x / 2) / 2mp.figure("Fill", facecolor='lightgray')
mp.title("Fill", fontsize=18)
mp.xlabel('X', fontsize=14)
mp.ylabel('Y', fontsize=14)
mp.tick_params(labelsize=10)
mp.plot(x, sinx, color='dodgerblue',label='y=sin(x)')
mp.plot(x, cosx, color='orangered',label=r'$y=\frac{cos(\frac{x}{2})}{2}$')
# 填充
mp.fill_between(x, sinx, cosx, sinx > cosx,color='dodgerblue', alpha=0.5)
mp.fill_between(x, sinx, cosx, sinx < cosx,color='orangered', alpha=0.5)mp.tight_layout()
mp.legend()
mp.show()

条形图(柱状图)

mp.bar(x,            # 水平坐标数组y,          # 柱状图高度数组width,     # 柱子的宽度color='', # 填充颜色label='',  #alpha=0.5 #
)

案例:绘制苹果12个月的销量,绘制橘子的销量.

import numpy as np
import matplotlib.pyplot as mpapples = [23, 19, 81, 22, 65, 34, 65, 23, 89, 56, 89, 39]
oranges = [56, 56, 74, 39, 64, 95, 63, 48, 56, 98, 65, 45]mp.figure('Bar', facecolor='lightgray')
mp.title('Bar', fontsize=18)
mp.xlabel('Month', fontsize=14)
mp.ylabel('Price', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':', axis='y')x = np.arange(len(apples))
mp.bar(x - 0.2, apples, 0.4,color='dodgerblue', label='Apple')
mp.bar(x + 0.2, oranges, 0.4,color='orangered', label='Orange')mp.xticks(x, ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])mp.legend()
mp.show()

饼状图

mp.pie(values,           # 值列表spaces,            # 扇形之间的间距列表labels,      # 扇形的标签列表colors,            # 扇形的颜色列表'%d%%',          # 所占比例的格式shadow=True,  # 绘制阴影startangle=90,   # 逆时针绘制饼状图的起始角度radius=1        # 半径
)

案例:绘制饼状图显示5门语言的流行度.

import numpy as np
import matplotlib.pyplot as mpmp.figure('Pie', facecolor='lightgray')
mp.title('Pie', fontsize=14)values = [26, 17, 21, 29, 11]
spaces = [0.05, 0.01, 0.01, 0.01, 0.01]
labels = ['Python', 'JavaScript','C++', 'Java', 'PHP']
colors = ['dodgerblue', 'orangered','limegreen', 'violet', 'gold']
# 等轴比例绘制
mp.axis('equal')
mp.pie(values, spaces, labels, colors,'%d%%', shadow=True,startangle=90, radius=1)
mp.legend()
mp.show()

等高线图

组成等高线需要网格点坐标矩阵,也需要每个点的高度.所以等高线的绘制是属于3D数学模型的范畴.

#绘制等高图
mp.contourf(x, y,   # 网格坐标矩阵z,      # 坐标矩阵中每个点的值8,      # 把整个模型的高度等分8份cmap='jet' #颜色映射
)
#绘制等高线
mp.contour(x, y, z, 8, colors='black',linewidths=0.5
)
# 设置等高线的标签文本
mp.clabel(cntr, inline_spacing=1,fmt='%.1f', fontsize=10)

#### 热成像图

用图形的方式显示矩阵及矩阵中值的大小.

# origin
# 'upper': 默认值 y轴方向向下
# 'lower': y轴方向向上
mp.imshow(z, cmap='jet', origin='lower')

3D图像绘制

matplotlib支持绘制三维曲面,但需要使用axes3d提供的3d坐标系进行绘制.

from mpl_toolkits.mplot3d import axes3d
ax3d = mp.gca(projection='3d')
# 使用ax3d对象绘制3维图形
ax3d.scatter()          # 3维散点图
ax3d.plot_surface()     # 3维平面图
ax3d.plot_wireframe()   # 3维线框图

3维散点图的绘制

ax3d.scatter(x, y, z,        # 点的位置坐标数组 x, y, zmarker='',     #s=30,         #zorder=3,     #color='',       #edgecolor='',   # 边缘色facecolor='',   # 填充色c=v,          # 设置颜色(使用cmap映射)cmap=''
)

案例: 生成三维散点数组, 显示在三维坐标系中.

import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3dn = 1000
x = np.random.normal(0, 1, n)
y = np.random.normal(0, 1, n)
z = np.random.normal(0, 1, n)mp.figure('3D Points', facecolor='gray')
mp.title('3D Points', fontsize=18)
# 获取3d坐标轴
ax = mp.gca(projection='3d')
ax.set_xlabel('X', fontsize=12)
ax.set_ylabel('Y', fontsize=12)
ax.set_zlabel('Z', fontsize=12)
mp.tick_params(labelsize=8)
# v用于设置散点的颜色
v = np.sqrt(x**2 + y**2 + z**2)
ax.scatter(x, y, z, s=30, c=v, cmap='jet',alpha=0.5)
mp.show()


绘制3d平面图

#如果n为1000, rstride为30,则图像将会被评分1000/33份,
#分别设置不同的渐变色.这意味着跨距越小,图像越细腻,资源消
#耗也越大.
ax3d.plot_surface(x, y, z,  # 与等高线图的xyz参数相同rstride=30, # 行跨距cstride=30, # 列跨距cmap='jet'    # 颜色映射
)

绘制3d线框图

ax3d.plot_wireframe(x, y, z,         # 与等高线图的xyz参数相同rstride=30,     # 行跨距cstride=30,   # 列跨距linewidth=1,  color=''
)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
'''
绘制3D线框图
'''
import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3dn = 1000
x, y = np.meshgrid(np.linspace(-3, 3, n),np.linspace(-3, 3, n))
z = (1 - x / 2 + x**5 + y**3) * \np.exp(-x**2 - y**2)mp.figure('Wire', facecolor='lightgray')
mp.title('Wire', fontsize=18)
ax3d = mp.gca(projection='3d')
ax3d.set_xlabel('x', fontsize=14)
ax3d.set_ylabel('y', fontsize=14)
ax3d.set_zlabel('z', fontsize=14)
mp.tick_params(labelsize=10)ax3d.plot_wireframe(x, y, z, rstride=30, cstride=30,color='dodgerblue')mp.show()

极坐标系

与笛卡尔坐标系不同,某些情况下极坐标系适合处理与角度有关的图像.极坐标系可以描述极径ρ(rho)与极角θ(theta)之间的关系.

mp.figure()
mp.gca(projection='polar')
# 再进行图像绘制时将会基于极坐标系进行绘制

案例:在极坐标系中绘制一条线 [0,4π] y=0.8*x

import numpy as np
import matplotlib.pyplot as mpx = np.linspace(0, 4 * np.pi, 1000)
y = 0.8 * x
sinx = 3 * np.sin(6 * x)
mp.figure('Polar', facecolor='lightgray')
mp.gca(projection='polar')  # 使用极坐标系
mp.title('Polar', fontsize=18)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
mp.plot(x, y, label='y=0.8x')
mp.plot(x, sinx, label='y=3sin(6x)')
mp.legend()
mp.show()

实现简单动画

动画是在一段时间内快速连续的重新绘制图像的过程.

matplotlib提供了方法用于处理简单动画的绘制.定义update函数用于实时更新图像.

import matplotlib.animation ma
# 更新图像的函数,在该函数中实现图像更新业务
def update(number):pass
# 开始执行一段动画 (每隔10毫秒执行update更新界面)
# mp.gcf(): 获取当前窗体 getCurrentFrame()
# update:   更新图像的函数,在该函数中实现图像更新业务
# interval: 周期时间
ma.FuncAnimation(mp.gcf(), update, interval=10)

案例:

import numpy as np
import matplotlib.pyplot as mp
import matplotlib.animation as ma# 1.随机生成100个泡泡
# [((1,2), 30, 1, (0.2,0.2,0.2))]n = 100
balls = np.zeros(n, dtype=[('position', float, 2),('size', float, 1),('growth', float, 1),('color', float, 4)])
# 对着100个元素进行初始化 设置随机值
# uniform随机生成0-1的数填充n行2列的数组
balls['position'] = np.random.uniform(0, 1, (n, 2))
balls['size'] = np.random.uniform(60, 70, n)
balls['growth'] = np.random.uniform(10, 50, n)
balls['color'] = np.random.uniform(0, 1, (n, 4))# 绘制这些球
mp.figure('Bubbles', facecolor='lightgray')
mp.title('Bubbles', fontsize=18)
mp.xticks([])
mp.yticks([])sc = mp.scatter(balls['position'][:, 0],balls['position'][:, 1],balls['size'],color=balls['color'])# 在update函数中更新球的状态
def update(number):balls['size'] += balls['growth']# 选择一个泡泡使之破裂boom_ind = number % nballs[boom_ind]['size'] = \np.random.uniform(67, 80, 1)balls[boom_ind]['position'] = \np.random.uniform(0, 1, (1, 2))# 重新绘制sc.set_sizes(balls['size'])sc.set_offsets(balls['position'])anim = ma.FuncAnimation(mp.gcf(), update, interval=30)mp.show()

使用生成器函数提供数据,实现动画的绘制

import matplotlib.animation ma
# 更新图像的函数,在该函数中实现图像更新业务
def update(val):pass
# 生成器函数用于提供动画所需参数
def generator():# ...yield val
#执行动画时,将会先调用generator获取数据,然后带着数据调
#用update函数执行界面更新.(这个过程每10毫秒执行一次)
ma.FuncAnimation(mp.gcf(), update, generator,interval=10)


案例:模拟信号接收器 y=sin(2πt)*exp(sin(0.2πt))

import numpy as np
import matplotlib.pyplot as mp
import matplotlib.animation as mamp.figure('Signal', facecolor='lightgray')
mp.title('Signal', fontsize=18)
mp.xlim(0, 10)
mp.ylim(-3, 3)
mp.grid(linestyle=':', alpha=0.5)
pl = mp.plot([], [], color='dodgerblue',label='Signal')[0]
pl.set_data([], [])
# 接收生成器生成的(x,y),添加到绘制的
# 曲线坐标数组中,重新绘制界面def update(data):t, v = datax, y = pl.get_data()# 把新的坐标点,添加到当前plot对象坐标数组中x.append(t)y.append(v)# 重新设置plot对象的数据集pl.set_data(x, y)# 移动坐标轴if(x[-1] > 10):mp.xlim(x[-1] - 10, x[-1])passx = 0
# 生成坐标点数据 yield返回
def generator():global xy = np.sin(2 * np.pi * x) * \np.exp(np.sin(0.2 * np.pi * x))yield (x, y)x += 0.05# 执行动画
anim = ma.FuncAnimation(mp.gcf(), update, generator, interval=30)mp.show()

numpy与matplotlib应用

加载文件

读取aapl.csv文件, 在图标中绘制文件信息.

#当numpy读取文件时,会把第一列的数据先经过func函数处理,
#然后交给dtype进行数据类型转换,最终赋值给dates变量.
def func(date):return '2011-10-10'dates, opening_price = np.loadtxt('../data/csv',         # 文件路径delimiter=',',             # 文件的列分隔符(,)usecols=(1,3),         # 需要读取的列的下标unpack=True,            # 是否需要拆包dtype='U10,f8',          # 读取的每一列的类型 converters={1:func}        # 转换器函数字典
)
import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md# 定义函数,转换日期格式def dmy2ymd(dmy):dmy = str(dmy, encoding='utf-8')date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()s = date.strftime("%Y-%m-%d")return s# 加载文件
dates, opening_prices, highest_prices, \lowest_prices, closing_prices = \np.loadtxt('aapl.csv',delimiter=',',usecols=(1, 3, 4, 5, 6),unpack=True,dtype='M8[D], f8, f8, f8, f8',converters={1: dmy2ymd})# 绘制收盘价的折线图
mp.figure('AAPL', facecolor='lightgray')
mp.title('AAPL', fontsize=18)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
#设置刻度定位器, x轴需要显示时间信息
ax = mp.gca()
# x轴主刻度为每周一
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
# x轴次刻度为每天
ax.xaxis.set_minor_locator(md.DayLocator())
# 把日期数组元素类型改为md可识别的类型
dates = dates.astype(md.datetime.datetime)
mp.plot(dates, closing_prices,color='dodgerblue', linewidth=3,linestyle=':', label='closing_price')mp.legend()
# 自动格式化日期显示方式
mp.gcf().autofmt_xdate()
mp.show()


案例:读取文件,绘制股价图.

import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md# 定义函数,转换日期格式def dmy2ymd(dmy):dmy = str(dmy, encoding='utf-8')date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()s = date.strftime("%Y-%m-%d")return s# 加载文件
dates, opening_prices, highest_prices, \lowest_prices, closing_prices = \np.loadtxt('aapl.csv',delimiter=',',usecols=(1, 3, 4, 5, 6),unpack=True,dtype='M8[D], f8, f8, f8, f8',converters={1: dmy2ymd})# 绘制收盘价的折线图
mp.figure('AAPL', facecolor='lightgray')
mp.title('AAPL', fontsize=18)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
#设置刻度定位器, x轴需要显示时间信息
ax = mp.gca()
# x轴主刻度为每周一
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
# x轴次刻度为每天
ax.xaxis.set_minor_locator(md.DayLocator())
# 把日期数组元素类型改为md可识别的类型
dates = dates.astype(md.datetime.datetime)
mp.plot(dates, closing_prices,color='dodgerblue', linewidth=3,linestyle=':', label='closing_price',alpha=0.3)# 整理蜡烛图所需的颜色
# 填充色
rise = closing_prices > opening_prices
color = np.array([('white' if x else 'green')for x in rise])
# 边框色
ecolor = np.array([('red' if x else 'green')for x in rise])# 绘制K线图的影线
mp.bar(dates,highest_prices - lowest_prices,0.1, lowest_prices, color=ecolor)# 绘制K线图的实体
mp.bar(dates,closing_prices - opening_prices,0.8, opening_prices,edgecolor=ecolor, color=color)mp.legend()
# 自动格式化日期显示方式
mp.gcf().autofmt_xdate()
mp.tight_layout()
mp.show()

Matplotlib高级相关推荐

  1. 小瓜讲matplotlib高级篇——坐标轴设置(坐标轴居中、坐标轴箭头、刻度设置、标识设置)

    文章目录 问题 解决方案 代码附录 文章导引列表: 机器学习 数据分析 数据可视化 问题 我们在用matplotlib绘制图的时候总是有各种需求,比如下图为matplotlib默认设置画的正弦图 但是 ...

  2. matplotlib高级教程之形状与路径——patches和path

    一.什么是形状和路径 在一般的使用matplotlib进行绘图的时候,线形图.条形图.折线图.扇形图等等都是我们常见的一些绘图函数,但是有时候我们需要绘制一些特殊的形状和路径,比如我们要绘制一个椭圆, ...

  3. Python matplotlib高级绘图详解

    Pyplot绘图结构 Aritists matplotlib API包含有三层: backend_bases.FigureCanvas : 图表的绘制领域 backend_bases.Renderer ...

  4. matplotlib高级篇——坐标轴设置(坐标轴居中、坐标轴箭头、刻度设置、标识设置)

    问题 我们在用matplotlib绘制图的时候总是有各种需求,比如下图为matplotlib默认设置画的正弦图 但是我们的心中想要达到的目标图为下图,那么就需要对坐标轴进行设置. 解决方案 这里要介绍 ...

  5. matplotlib 柱状图 分组_Python数据分析与可视化之matplotlib可视化(三)

    散点图显示字段相关性 文章目录 加载远程的数据集 散点图与乱码问题 Matplotlib 是 Python 的绘图库. 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案. 默 ...

  6. matplotlib画会动的椭圆

    最近需要绘制会动的椭圆,去可视化一些结果.在实现的过程中遇到了一些问题,记录一下自己的实现方法 实现结果 animation 我们知道matplotlib提供一个animation的子包来实现绘制动态 ...

  7. 用 matplotlib 做交互式的票房分析

    前一段时间一直在做电影数据方面的工作,在做可视化的时候我们用的是matplotlib,但matplotlib比较适合绘制静态图片,如果要交互式的可视化我们一般都使用plotly,但经常在两者之间切换非 ...

  8. matplotlib.pyplot.figure()结构及用法详解

    matplotlib.pyplot.figure官方文档 源代码 matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolo ...

  9. 带你十分钟快速入门画图绘图作图神器 Matplotlib_各种画图小结

    20220612 excel也可以画图 20220525 U-net架构(例如最低分辨率为32x32像素).每个蓝框对应一个多通道特征图.通道的数量在方框的顶部表示.x-y尺寸在盒子的左下边缘.白盒代 ...

最新文章

  1. 自学python转行-转行Python,应该如何短期自学,达到就业水平
  2. 4 拼接_解析,地漏与瓷砖的4种拼接方法及安装工艺
  3. 网站不能访问的解决思路
  4. 中通滤波matlab,如何用MATLAB将低通改成中通滤波器
  5. mysql 5.6.14 win32_mysql-5.6.14-win32为免安装解压缩版
  6. python调用github_Python调用GithubAPI并进行初步的数据分析
  7. 【MySQL】mysql 数据库名称 中间带有中划线问题
  8. 数组的属性、foreach遍历、交错数组与矩形数组的区别
  9. python基础--列表,元组
  10. 小芭比linux怎么装win7_超迷你的Linux系统--Puppy Linux(小芭比)
  11. 现代软件工程_项目回顾模板
  12. 杭州软件测试工程师培训
  13. 计算机导论 ——绪论
  14. 建设 Web3,现在最需要 Web2 的移民?
  15. Bellman_Ford的负环
  16. 最详细PicGo(图床)加阿里云OSS实现图片自动上传
  17. Pytorch创建自己的数据集(图像分割)
  18. 计算机网络—数据链路层
  19. 小学计算机教案模板范文,小学信息技术教案模板锦集5篇范本
  20. 终端显示env: node\r: No such file or directory的解决办法

热门文章

  1. 浅谈驱动芯片的绝缘安规标准
  2. CAD二次开发Curve类函数
  3. 湖南大学2022年计算机考研复试时间
  4. 街景语义分割数据集总结
  5. python.exe-找不到序数:无法定位序数191与动态链接库libiomp5md.dll上
  6. 用vulkan写个引擎 (三)ui组件
  7. python 3d气泡图 python 3d 散点图
  8. cacti install
  9. Java并发编程(五):计算机基础-机器语言、高级语言和操作系统
  10. VSYNC+三重缓存机制+Choreographer