Rank: 103 based on 704 downloads (last 30 days) and 1 file submitted
photo

Erik Johnson

E-mail
Company/University
Univ of Southern California

Personal Profile:

Associate Professor & Associate Chair, Astani Department of Civil & Env. Engineering, University of Southern California
B.S. (1988), M.S. (1993), Ph.D. (1997), Aeronautical & Astronautical Engineering, University of Illinois at Urbana-Champaign
http://www.usc.edu/dept/civil_eng/johnsone/

Professional Interests:

 

Watch this Author's files

 

Files Posted by Erik
Updated   File Tags Downloads
(last 30 days)
Comments Rating
20 May 2009 Screenshot arrow.m Draw a line with an arrowhead. Author: Erik Johnson annotation, customization, arrow, arrowhead, line, graphics 704 90
  • 4.60215
4.6 | 96 ratings
Comments and Ratings by Erik View all
Updated File Comments Rating
12 Jul 2012 legendflex: a more flexible legend Create a legend with more flexible positioning and labeling capabilities Author: Kelly Kearney

If legendflex is called like:

[legend_h, object_h, plot_h, text_str] = legendflex(h, strs, 'ncol', ncols, ... );

then a workaround for the column offset is:

% fix legendflex's subsequent column locations
h = findobj(object_h, 'type', 'line');
y = get(h, {'YData'});
y = repmat(ans(1:ceil(length(y)/2/ncols)*2,:), ncols, 1);
y = ans(1:length(h),:);
set(h, {'YData'}, y);

11 Jul 2012 legendflex: a more flexible legend Create a legend with more flexible positioning and labeling capabilities Author: Kelly Kearney

A VERY useful function. However, I get slight offsets in the vertical locations of the lines/markers in different columns. Have you seen this?

For example, the code:

nrows = 1;
ncols = 3;
n = nrows * ncols;
x = repmat([0;1], 1, n);
y = [zeros(1,n); (1:n)/n];
h = plot(x, y);
strs = num2cell(char('`'+(1:n)), 1)';
[legax,legh] = legendflex(h, strs, 'ncol', ncols);

get(findobj(legh,'type','line','LineStyle','-'),{'YData'});
cat(1,ans{:}); yline=reshape(ans(:,1),[],3)
get(findobj(legh,'type','line','LineStyle','none'),{'YData'});
cat(1,ans{:}); ymarker=reshape(ans(:,1),[],3)
get(findobj(legh,'type','text'),{'Position'});
cat(1,ans{:}); ytext=reshape(ans(:,2),[],3)

gives the results:

yline = [9.5388 9.2710 9.0032]
ymarker = [9.5388 9.2710 9.0032]
ytext = [4.3091 4.3091 4.3091]

showing that the text items are set at consistent locations, but the lines and markers are slightly offset. (Change nrows to, say, 8 and the same vertical offset happens on all elements of subsequent columns.)

Any suggestions?

P.S. This is in MATLAB 7.14.0.739 (R2012a) on a Mac.

Comments and Ratings on Erik's Files View all
Updated File Comment by Comments Rating
21 Oct 2014 arrow.m Draw a line with an arrowhead. Author: Erik Johnson David

Love this script, but it looks like there's a fundamental incompatibility with the new 2014b graphics system, in which gca no longer returns a number. Simply running the demo (arrow DEMO) returns the error:

Undefined function 'mtimes' for input arguments of type
'matlab.graphics.axis.Axes'.
Error in arrow (line 423)
ax = o * gca;

24 Sep 2014 arrow.m Draw a line with an arrowhead. Author: Erik Johnson Ivanescu, Liviu

Nice function, but unfortunately it doesn't accept axes handle, like plot. In same cases, like Maltab GUI, one cannot just set the axes before making the plot.

15 Sep 2014 arrow.m Draw a line with an arrowhead. Author: Erik Johnson Pete

I was a bit sceptical, but this is actually a very useful and well-documented function. Many thanks

21 Aug 2014 arrow.m Draw a line with an arrowhead. Author: Erik Johnson Darien

You are brilliant. Thank you very much for your hard work and masterful technique.

22 Jul 2014 arrow.m Draw a line with an arrowhead. Author: Erik Johnson Johan

Works nicely, but i did find a bug:
an exactly vertical arrow (from [0 0 0] to [0 0 1]) is plotted with a length of ~16 reaching far in the negative z-domain. Just type in
arrow([0 0 0],[0 0 1])
and see.

Does someone know a solution to this?

with kind regards,
Johan.

Contact us