Transforming a script into a function with multiple inputs
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Maja Zdulska
am 15 Okt. 2020
Bearbeitet: Sudhakar Shinde
am 15 Okt. 2020
Hi everyone,
I'm working on a wave dataset stored in a .csv format (I've attached a sample to this post). I'm using the 2019b edition of Matlab. I wrote a script that enables me to plot the changes in wave properties for the chosen month, over the years:
%script to plot changes in wave height data with time
%load data
data=readtable(myfilename);
%create subsets of data divided by month
Jan=data{:,2}==1;
Feb=data{:,2}==2;
%etc...
%define variables
year=Jan{:,1};
height=Jan{:,3};
%plot
figure(1)
clf
plot(year,height,'b')
xlabel('Year')
ylabel('H_s')
hold on
%fit a trendline through the data
height_coeff=polyfit(year,height,1);
height_trend=polyval(height_coeff,year);
plot(year,height_trend,'r');
I would like to turn this into a function with two inputs (filename and month), so that I could change the file and the month of data that I want to plot without editing the code itself. I've tried something like the code below, but it returns an empty graph. I suspect it has something to do with me not defining 'month' correctly, but I don't know how to fix it. Help would be much appreciated
function trial(filename, month)
data=readtable(filename);
Jan=data{:,2}==1;
Feb=data{:,2}==2;
Mar=data{:,2}==3;
Apr=data{:,2}==4;
May=data{:,2}==5;
Jun=data{:,2}==6;
Jul=data{:,2}==7;
Aug=data{:,2}==8;
Sep=data{:,2}==9;
Oct=data{:,2}==10;
Nov=data{:,2}==11;
Dec=data{:,2}==12;
month={Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};
year=month{:,1};
height=month{:,3};
plot(year,height,'b')
xlabel('Year')
ylabel('H_s')
hold on
height_coeff=polyfit(year,height,1);
height_trend=polyval(height_coeff,year);
plot(year,height_trend,'r');
end
0 Kommentare
Akzeptierte Antwort
Sudhakar Shinde
am 15 Okt. 2020
Bearbeitet: Sudhakar Shinde
am 15 Okt. 2020
%load data
myfilename = 'Example.csv';
month = 1;
trial(myfilename, month);
function trial(myfilename, month)
data=readtable(myfilename);
%Extract feb data
[year,height]=Extract(data,month);
plot(year,height,'b')
xlabel('Year')
ylabel('H_s')
hold on
%fit a trendline through the data
height_coeff=polyfit(year,height,1);
height_trend=polyval(height_coeff,year);
plot(year,height_trend,'r');
end
%This function could extract data of jan(1) or feb(2) or march(3).
%Similaraly add cases till dec (12)
function [Year,Height]= Extract(data,month)
switch month
case 1
Jan=(data.Month==1);
Year = data.Year(Jan);
Height = data.Height(Jan);
case 2
FEB=(data.Month==2);
Year = data.Year(FEB);
Height = data.Height(FEB);
case 3
March=(data.Month==3);
Year = data.Year(March);
Height = data.Height(March);
end
end
0 Kommentare
Weitere Antworten (1)
Ameer Hamza
am 15 Okt. 2020
You input variable name is 'month', but you are overwriting it on this line
month={Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};
Use some other variable name here.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Standard File Formats finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!