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

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

  1. quiver绘图指针
  2. 图例位置 X, Y
  3. 标注大小 U
  4. 标注单位字符
  5. 其他参数

    1). 输入坐标 X, Y 单位

    2). (文字)标注在图例哪个位置

    3). 标注与图例相对距离

    4). 标注字体颜色

使用方法:

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

  1. 使用quiver绘图
  2. 将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')

最终效果图

代码

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

Matlab矢量图图例函数quiverkey的更多相关文章

  1. matlab 矢量化编程(四)—— 标量函数转化为能够处理矢量的函数

    1. 组合的矢量实现 nchoosek(n, k) 的第二个参数在 matlab 下是不支持矢量化的,必须是标量形式.但 matlab 下的 gamma 函数,却可支持,矢量形式,又因为,gamma ...

  2. matlab中help所有函数功能的英文翻译

    doc funname 在帮助浏览器中打开帮助文档 help funname 在命令窗口打开帮助文档 helpbrowser 直接打开帮助浏览器 lookfor funname 搜索某个关键字相关函数 ...

  3. C# 导出一个控件的矢量图

    调用Control.DrawToBitmap(Bitmap) 方法是很容易得到控件的图形的. 但是bitmap是栅格化图形.栅格化图形有很多缺点,比如文件体积比较大. 放大后失真. 不易编辑等等. 这 ...

  4. matlab 全部的随机数函数

    matlab 全部的随机数函数 (一)Matlab内部函数 a. 基本随机数 Matlab中有两个最基本生成随机数的函数. 1.rand() 生成(0,1)区间上均匀分布的随机变量.基本语法: ran ...

  5. Android 开发 VectorDrawable 矢量图 (三)矢量图动画

    VectorDrawable 矢量图 三部曲: Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图 Android 开发 VectorDrawabl ...

  6. D3.js (v3)+react框架 基础部分之认识选择集和如何绘制一个矢量图

    首先需要下载安装d3.js  :  yarn add d3 然后在组建中引入 :  import * as d3 from 'd3' 然后定义一个方法,在componentDidMount()这个钩子 ...

  7. 矢量图和Word:EPS,PDF,EMF和SVG

    1.EMF和Word 在学校的时候,我思考过一个问题,论文中的插图如何保证清晰度.关键之一就是使用矢量图.参考知乎问题:如何在论文中画出漂亮的插图?.常见的矢量图包括:EPS,EMF和SVG.SVG适 ...

  8. Matlab随笔之画图函数总结

    原文:Matlab随笔之画图函数总结 MATLAB函数画图 MATLAB不但擅长於矩阵相关的数值运算,也适合用在各种科学目视表示(Scientific visualization).本节将介绍MATL ...

  9. Matlab中的eig函数和Opecv中eigen()函数的区别

    奇异值分解的理论参见下面的链接 http://www.cnblogs.com/pinard/p/6251584.html https://blog.csdn.net/shenziheng1/artic ...

随机推荐

  1. 【UE4】GamePlay架构

    新标签打开或者下载看大图 更新: 增加 编程子系统 Subsystem 思维导图 Character pipeline

  2. logstash的安装和简单使用

    logstash的安装和简单使用 一.安装 1.下载并解压 2.logstash 一些命令行参数 1.查看帮助信息 2.加载指定pipeline文件路径 3.检测配置文件语法是否有错误 4.热加载pi ...

  3. netty传输java bean对象

    在上一篇博客(netty入门实现简单的echo程序)中,我们知道了如何使用netty发送一个简单的消息,但是这远远是不够的.在这篇博客中,我们来使用netty发送一个java bean对象的消息,但是 ...

  4. LVDS DP等显示器接口简介

    LVDS 产品传输速率从几百Mbps到2Gbps.它是电流驱动的,他通过在接收端放置一个负载而得到的电压,当电流正向流动,接收端输出为1,反之为0,它的摆幅250mV-450mV. lvds 即低压差 ...

  5. Go语言核心36讲(Go语言进阶技术十一)--学习笔记

    17 | go语句及其执行规则(下) 知识扩展 问题 1:怎样才能让主 goroutine 等待其他 goroutine? 我刚才说过,一旦主 goroutine 中的代码执行完毕,当前的 Go 程序 ...

  6. 整数转化 牛客网 程序员面试金典 C++ Python

    整数转化 牛客网 程序员面试金典 C++ Python 题目描述 编写一个函数,确定需要改变几个位,才能将整数A转变成整数B. 给定两个整数int A,int B.请返回需要改变的数位个数. 测试样例 ...

  7. C#笔记2__Char类、String类、StringBuilder类 / 正则表达式 /

    Char类 String类 字符串的格式化:String类的Format方法 StringBuilder类 以上:百度 or 查手册.....

  8. cf Learn from Life (简单贪心)

    有N个人站在一楼.一个电梯最多承载K个人. 每个人都有一个想去的楼层.f[1]....f[N]. f[i]属于[2,2000] 从a层到b层需花费abs(a-b)秒. 问电梯送完所有人然后回到一楼至少 ...

  9. Linux下的 sniff-andthen-spoof程序编写

    Linux下的 sniff-andthen-spoof程序编写 一.任务描述 在本任务中,您将结合嗅探和欺骗技术来实现以下嗅探然后欺骗程序.你需要两台机器在同一个局域网.从机器A ping IP_X, ...

  10. Spark面试题(四)

    1.Spark中的HashShufle的有哪些不足? 1)shuffle产生海量的小文件在磁盘上,此时会产生大量耗时的.低效的IO操作: 2)容易导致内存不够用,由于内存需要保存海量的文件操作句柄和临 ...