EDA365电子论坛网
标题: MATLAB 用“function handles”  [打印本页]
作者: mutougeda 时间: 2020-4-20 09:45
标题: MATLAB 用“function handles” 
Code Sample: Stacked Bars and Lines in MatlabI needed to make a plot that superimposes a “stacked” bar graph with a line in Matlab. I got started by referencing this post on Matlab central, which used “function handles” to pass plotting commands into plotyy. This got me thinking about some other Matlab features that are explained in the following code sample. Hope this helps in your work too!
The data is from the USGS’s estimate of U.S. Water Use for 2005.
1 S1 v9 i; p) G1 [, W6 A: b1 B( o g: Z) }, _0 v1 L8 v$ c
==================================================================
%How to plot data from USGS, Estimated Water Use in the U.S. in 2005
%as a stacked bar/line graph in Matlab.
%Specifically, we want the US population as a line, and the different
%water use types as stacked bars.
%The data, where each data value is for a different 5 year period
population = [151, 164, 180, 194, 206, 216, 230, 242, 252, 267, 285, 301];
totalwithdrawal = [180, 240, 270, 310, 370, 420, 430, 397, 404, 399, 413, 410];
public = [14, 17, 21, 24, 27, 29, 33, 36.4, 38.8, 40.2, 43.2, 44.2];
irrigation = [89, 110, 110, 120, 130, 140, 150, 135, 134, 130, 139, 128];
thermo = [40, 72, 100, 130, 170, 200, 210, 187, 194, 190, 195, 201];
%Place the data in a matrix, where each row is a
%different data type (i.e., population)
data = [thermo; irrigation; public;
totalwithdrawal-(public+irrigation+thermo)];
%Now, flip the data so each data type has its own column
data = data';
%To use different data types in the plotyy environment, you
�n use Matlab's 'anonymous function' feature. Stackedbar
%and prettyline below are temporary functions you can only
%use inside of this script.
stackedbar = @(x, A) bar(x, A, 'stack');
prettyline = @(x, y) plot(x, y, 'k', 'LineWidth', 5);
%There's a version of plotyy that accepts function handles as an
%argument. We'll pass stackedbar and prettyline in there as the
%last arguments to this function.
[ax, h1, h2] = plotyy(1950:5:2005, data, 1950:5:2005, population, stackedbar, prettyline);
%You'll notice the line and bar axes are not agreeing with each other.
%We can fix this using the ax variable created above.
set(ax(1), 'XLim', [1945 2010]);
set(ax(2), 'XLim', [1945 2010]);
%Get rid of one of the sets of ticks, to make sure
%the figure looks nice.
set(ax(2), 'XTick', []);
%Changing the colormap will change the colors of the
%stacked bars. For example:
colormap summer;
%Finally write the legend. Note that, for whatever reason,
%the line is first in the list of legend entries.
legend('Population', 'Thermoelectric Power', 'Irrigation', 'Public Supply', 'Other', 'Location', 'NorthWest');
; D& A& B) ~$ H5 ~ q* J
; `( @4 Z( B, R
作者: CCxiaom 时间: 2020-4-20 13:40
MATLAB 用“function handles” 
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) |
Powered by Discuz! X3.2 |