matplotlib quiver箭图绘制案例


Posted in Python onApril 17, 2020

quiver绘制表示梯度变化非常有用,下面是学习过程中给出的两个例子,可以很好理解quiver的用法

from pylab import *
close()

## example 1

x = linspace(0,10,40)
y = x**2*exp(-x)

u = array([x[i+1]-x[i] for i in range(len(x)-1)])
v = array([y[i+1]-y[i] for i in range(len(x)-1)])

x = x[:len(u)] # 使得维数和u,v一致
y = y[:len(v)]

c = randn(len(u)) # arrow颜色

figure()
quiver(x,y,u,v,c, angles='xy', scale_units='xy', scale=1) # 注意参数的赋值

## example 2

x = linspace(0,20,30)
y = sin(x)

u = array([x[i+1]-x[i] for i in range(len(x)-1)])
v = array([y[i+1]-y[i] for i in range(len(x)-1)])

x = x[:len(u)] # 使得维数和u,v一致
y = y[:len(v)]

c = randn(len(u)) # arrow颜色

figure()
quiver(x,y,u,v,c, angles='xy', scale_units='xy', scale=1) # 注意参数的赋值
show()

结果如下:

matplotlib quiver箭图绘制案例

matplotlib quiver箭图绘制案例

补充知识:Matlab矢量图图例函数quiverkey

Matlab自带函数中不包含构造 quiver 函数注释过程,本文参照 matplotlib 中 quiverkey 函数,构造类似函数为 Matlab 中 quiver 矢量场进行标注。

quiverkey函数

首先看 matplotlib 中 quiverkey 如何定义的

quiverkey(*args, **kw)
Add a key to a quiver plot.
 
Call signature::
 
 quiverkey(Q, X, Y, U, label, **kw)
 
Arguments:
 
 *Q*:
 The Quiver instance returned by a call to quiver.
 
 *X*, *Y*:
 The location of the key; additional explanation follows.
 
 *U*:
 The length of the key
 
 *label*:
 A string with the length and units of the key
 
Keyword arguments:
 
 *coordinates* = [ 'axes' | 'figure' | 'data' | 'inches' ]
 Coordinate system and units for *X*, *Y*: 'axes' and 'figure' are
 normalized coordinate systems with 0,0 in the lower left and 1,1
 in the upper right; 'data' are the axes data coordinates (used for
 the locations of the vectors in the quiver plot itself); 'inches'
 is position in the figure in inches, with 0,0 at the lower left
 corner.
 
 *color*:
 overrides face and edge colors from *Q*.
 
 *labelpos* = [ 'N' | 'S' | 'E' | 'W' ]
 Position the label above, below, to the right, to the left of the
 arrow, respectively.
 
 *labelsep*:
 Distance in inches between the arrow and the label. Default is
 0.1
 
 *labelcolor*:
 defaults to default :class:`~matplotlib.text.Text` color.
 
 *fontproperties*:
 A dictionary with keyword arguments accepted by the
 :class:`~matplotlib.font_manager.FontProperties` initializer:
 *family*, *style*, *variant*, *size*, *weight*
 
Any additional keyword arguments are used to override vector
properties taken from *Q*.
 
The positioning of the key depends on *X*, *Y*, *coordinates*, and
*labelpos*. If *labelpos* is 'N' or 'S', *X*, *Y* give the position
of the middle of the key arrow. If *labelpos* is 'E', *X*, *Y*
positions the head, and if *labelpos* is 'W', *X*, *Y* positions the
tail; in either of these two cases, *X*, *Y* is somewhere in the
middle of the arrow+label key object.
 
 
Additional kwargs: hold = [True|False] overrides default hold state

可以看到主要参数有这么些个

quiver绘图指针

图例位置 X, Y

标注大小 U

标注单位字符

其他参数

1). 输入坐标 X, Y 单位
2). (文字)标注在图例哪个位置
3). 标注与图例相对距离
4). 标注字体颜色

使用方法:

对应Matlab函数也应该使用这么个流程

使用quiver绘图

将quiver返回指针与图例位置坐标和大小等作为参数传入

示例

[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;

figure; 
Qh = quiver(x,y,u,v);

quiverkey(Qh, 0.5, 2.5, 1, 'm/s', 'Color', 'r', 'Coordinates', 'data')

最终效果图

matplotlib quiver箭图绘制案例

代码

function Q = quiverkey(Q, X, Y, U, label, varargin)
%QUIVERKEY legend for quiver
%
% QUIVERKEY(Q, X, Y, U, label) 
% 
% Arguments:
%  Q :  The quiver handle returned by a call to quiver
%  X,Y : The location of the legend
%  U :  The unit length. If U<0, the arrow will be reversed
%  label : The string with the length and units of the key
% 
% Addition arguments:
%  Coordinates = [ 'axes' | 'data'(default) ]
% 
%   'axes' & 'figure' : 'axes' and 'figure' are normalized 
%      coordinate systems with 0,0 in the lower left 
%      and 1,1 in the upper right;
%   'data' : use the axes data coordinates
% 
%  LabelDistance : Distance in 'coordinates' between the arrow and the
%     label. Deauft is 0.1 (units 'axes').
% 
%  Color : overrides face and edge colors from Q.
% 
%  LabelPosition = [ 'N' | 'S'(default) | 'E' | 'W' ]
% 
%    Position the label above, below, to the right, 
%    to the left of the arrow, respectively.
% 
%  LabelColor : defaults to black
%  
% Examples: 
% 
% [x,y] = meshgrid(0:0.2:2,0:0.2:2);
% u = cos(x).*y;
% v = sin(x).*y;
% figure; Qh = quiver(x,y,u,v);
% quiverkey(Qh, 0.5, 2.5, 1, 'm/s', 'Color', 'r', 'Coordinates', 'data')
% 
% Author:
% li12242 - Department of Civil Engineering in Tianjin University
% Email:
% li12242@tju.edu.cn
% 

%% get input argument
if nargin < 5 
 error('Input arguments" Number incorrect!')
end

if isempty(varargin) && mod(length(varargin), 2) ~= 0
 error('Input arguments donot pairs!')
else
 [CoorUnit, LabelDist, Color, LabelPosition, LabelColor] = getInput(varargin);
end


%% add legend arrow

% get original data
xData = get(Q, 'XData'); yData = get(Q, 'YData');
uData = get(Q, 'UData'); vData = get(Q, 'VData');

% get axes properties
haxes = get(Q, 'Parent');
xLim = get(haxes, 'XLim'); yLim = get(haxes, 'YLim');
NextPlot = get(haxes, 'NextPlot');

% set axes properties
set(haxes, 'NextPlot', 'add')

if strcmp(CoorUnit, 'axes')
 % position of legend arrow
 xa = xLim(1) + X*(xLim(2) - xLim(1));
 ya = yLim(1) + Y*(yLim(2) - yLim(1));
else
 xa = X; ya = Y;
end

% add legend arrow into data vector
xData = [xData(:); xa]; yData = [yData(:); ya];
uData = [uData(:); U]; vData = [vData(:); 0];

% reset data
set(Q, 'XData', xData, 'YData', yData, 'UData', uData, 'VData', vData);
set(Q, 'Color', Color)

%% add text
dx = LabelDist*(xLim(2) - xLim(1));
dy = LabelDist*(yLim(2) - yLim(1));

% set position of label
switch LabelPosition
 case 'N'
  xl = xa; yl = ya + dy;
 case 'S'
  xl = xa; yl = ya - dy;
 case 'E'
  xl = xa + dx; yl = ya;
 case 'W'
  xl = xa - dx; yl = ya;
end% switch

th = text(xl, yl, [num2str(U), ' ', label]);
set(th, 'Color', LabelColor);

% turn axes properties to original
set(haxes, 'NextPlot', NextPlot)

end% func

%% sub function

function [CoorUnit, LabelDist, Color, LabelPosition, LabelColor] = getInput(varcell)
% Input:
% varcell - cell variable
% Output:
% 
nargin = numel(varcell);

%% set default arguments

CoorUnit = 'data';
LabelDist = 0.05; % units 'axes'
Color = 'k';
LabelPosition = 'S';
LabelColor = 'k';

%% get input arguments
contour = 1;
while contour < nargin
 switch varcell{contour}
  case 'Coordinates'
   CoorUnit = varcell{contour+ 1};
  case 'LabelDistance'
   LabelDist = varcell{contour+ 1};
  case 'Color'
   Color = varcell{contour+ 1};
  case 'LabelPosition'
   LabelPosition = varcell{contour+ 1};
  case 'LabelColor'
   LabelColor = varcell{contour+ 1};
  otherwise
   error('Unknown input argument.')
 end% switch
 contour = contour + 2;
end% while

end% fun

以上这篇matplotlib quiver箭图绘制案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 序列的方法总结
Oct 18 Python
python的多重继承的理解
Aug 06 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
对Python 内建函数和保留字详解
Oct 15 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
如何使用Python实现斐波那契数列
Jul 02 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
部署Django到阿里云服务器教程示例
Jun 03 Python
python如何设置静态变量
Sep 07 Python
python邮件中附加文字、html、图片、附件实现方法
Jan 04 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 #Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 #Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 #Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 #Python
Python实现自动打开电脑应用的示例代码
Apr 17 #Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 #Python
Python读取excel文件中带公式的值的实现
Apr 17 #Python
You might like
php解压文件代码实现php在线解压
2014/02/13 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
php实现数据库的增删改查
2017/02/26 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
JS前端笔试题分析
2016/12/19 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
Python fileinput模块使用实例
2015/06/03 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
python 实现的车牌识别项目
2021/01/25 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
音乐器材管理制度
2014/01/31 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
土木工程求职信
2014/05/29 职场文书
党支部特色活动方案
2014/08/20 职场文书
2015年纪委工作总结
2015/05/13 职场文书
就业证明函
2015/06/17 职场文书
python入门之算法学习
2021/04/22 Python