我已授权

注册

李洋:坐标轴刻度标签旋转升级版

2013-06-07 17:39:27 和讯股票  李洋

  1.支持上下左右四个坐标轴的刻度标签旋转

  2.支持plotyy及其他所有画图函数返回的axes句柄的刻度标签旋转(谢老师的我尝试过除了plot以外其他的画图函数有的支持的不是很好)

  3.增加刻度标签的对齐方式(left | center | right)

  缺点:

  当你进行图形的局部放大或缩小的时候,已经进行旋转的刻度标签无法进行位置的动态调整和动态标签增加,这个其实也是可以进行完善的,但稍微有点麻烦。懒得弄了。

  实现核心说白了就是 利用text命令来重新绘制刻度标签。

  可能有人要问为什么要进行坐标轴刻度标签旋转?当你要进行坐标轴刻度标签的自由控制,你就知道这有多重要了。

  实例展示:

图

  2013-5-29 16:48 上传下载附件 (60.42 KB)

  实例代码:

  %% TickLabelRotate_Test

  % by LiYang

  % Email:farutoliyang@gmail.com

  % 2012/3/17

  % Matlab Version : Matlab R2011b

  %% A Little Clean Work

  tic;

  clear;

  clc;

  close all;

  format compact;

  %% TickLabelRotate(AX_handle,tag,rot,HorizontalAlignment,UpDown)

  x = 1:3;

  y = [-1,0,1];

  ylabel = {'-1(小)';'0(中)';'1(大)'};

  xlabel = {'2008-01-01';'2009-01-01';'2010-01-01'};

  figure;

  % 下

  subplot(2,2,1);

  plot(x,y);

  set(gca,'XTickLabel',xlabel);

  set(gca,'YTickLabel',ylabel);

  set(gca,'XTick',x);

  set(gca,'YTick',y);

  TickLabelRotate(gca,'x',60,'right',1);

  % 上

  subplot(2,2,2);

  plot(x,y);

  set(gca,'XTickLabel',xlabel);

  set(gca,'YTickLabel',ylabel);

  set(gca,'XTick',x);

  set(gca,'YTick',y);

  set(gca,'XAxisLocation','Top');

  TickLabelRotate(gca,'x',30,'left',2);

  % 左

  subplot(2,2,3);

  plot(x,y);

  set(gca,'XTickLabel',xlabel);

  set(gca,'YTickLabel',ylabel);

  set(gca,'XTick',x);

  set(gca,'YTick',y);

  TickLabelRotate(gca,'x',60,'right',1);

  TickLabelRotate(gca,'y',30,'right',3);

  % 右

  subplot(2,2,4);

  plot(x,y);

  set(gca,'XTickLabel',xlabel);

  set(gca,'YTickLabel',ylabel);

  set(gca,'XTick',x);

  set(gca,'YTick',y);

  set(gca,'YAxisLocation','Right');

  TickLabelRotate(gca,'y',30,'left',4);

  %% Record Time

  toc;

  坐标轴刻度标签旋转升级版TickLabelRotate.m源代码。

  function TickLabelRotate(AX_handle,tag,rot,HorizontalAlignment,UpDown)

  % 坐标TickLabel旋转

  % by LiYang

  % Email:farutoliyang@gmail.com

  % 2012/3/17

  % Matlab Version : Matlab R2011b

  %%

  if nargin < 5

  % 1 Down 2 Up 3 Left 4 Right

  UpDown = 1;

  end

  if nargin < 4

  HorizontalAlignment = 'right';

  % left | center | right

  end

  if nargin < 3

  rot = 60;

  end

  if nargin < 2

  tag = 'x';

  end

  %%

  switch tag

  case 'x'

  str = get(AX_handle,'XTickLabel');

  x = get(AX_handle,'XTick');

  yl = ylim(AX_handle);

  set(AX_handle,'XTickLabel',[]);

  if UpDown == 1

  y = zeros(size(x)) + yl(1) - range(yl)/80;

  end

  if UpDown == 2

  y = zeros(size(x)) + yl(end) + range(yl)/80;

  end

  text(x,y,str,'rotation',rot,...

  'Interpreter','none','HorizontalAlignment',HorizontalAlignment);

  case 'y'

  str = get(AX_handle,'YTickLabel');

  y = get(AX_handle,'YTick');

  xl = xlim(AX_handle);

  set(AX_handle,'YTickLabel',[]);

  if UpDown == 3

  x = zeros(size(y)) + xl(1) - range(xl)/80;

  end

  if UpDown == 4

  x = zeros(size(y)) + xl(end) + range(xl)/80;

  end

  text(x,y,str,'rotation',rot,...

  'Interpreter','none','HorizontalAlignment',HorizontalAlignment);

  end(李洋 永安期货

  

(责任编辑:金明正 HF023)
看全文
写评论已有条评论跟帖用户自律公约
提 交还可输入500

最新评论

查看剩下100条评论

热门新闻排行榜

和讯热销金融证券产品

【免责声明】本文仅代表作者本人观点,与和讯网无关。和讯网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。