Gannt Chart from a .csv file

6 views (last 30 days)
So I am trying to learn to use MATLAB for things I can do in Excel to improve my skills. I am wanting to make a Gannt chart for an up and coming project. I used the following table;
To produce this stacked bar chart following the guide found here https://www.officetimeline.com/make-gantt-chart/excel;
Is it possible to use the table I have created to make an identical chart in MATLAB.
So far my minimal progress has been;
>> Gannt = readtable('Gant example.csv');
>> Start = Gannt(:,1);
>> Task = Gannt(:,3);
>> Duration = Gannt(:,4);
%so I thought the next step would be:
>> barh(Start,Duration,'stacked')
%But then I got this error.
Error using bar (line 139)
Input arguments must be numeric, datetime, duration or categorical.
Error in barh (line 44)
h = bar(varargin{:});
Where have I gone wrong and what are the next steps?
Additionally, I'll have to make a lot of similar charts in the future, so is it possible to save such a code as a function?
Thank you in advance from this MATLAB beginner.

Accepted Answer

Monika Phadnis
Monika Phadnis on 13 May 2020
You can use the 'Task' column of your table as x-data for 'barh' function. You can make it a categorical array using the 'categorical' function. But to make it a categorical array, the array should have unique values.
I followed this approach for the csv file provided by you
rd = readtable('Gant.csv'); %read data from the csv file
xVals = categorical(unique(rd.Task,'stable')); % 'stable' preserves the order
After this, you can create a m x n matrix using 'Start' and 'Duration_months_' columns to plot the values. Since, the 3rd task above has two entries, we need to create a 9x4 matrix. 9 rows for 9 tasks. Out of 4 columns, first two columns for first entry of task (Start,Duration), next two for the next entry. Since only one task has a second entry, other tasks can have zeros.
A = double(rd.Start);
B = double(rd.Duration_months_);
C = zeros(9,1); %initialize with zeros
D = zeros(9,1);
% assign second entry to C and D arrays, i.e. the 5th entry to 3rd position
C(3,1) = A(5,1);
A = [A(1:4) ; A(6:10)]; % reshape A to have 9 values
D(3,1) = B(5,1);
B = [B(1,4) ; B(6:10)]; % reshape B to have 9 values
% plot
barh(xVals, [A B C D], 'stacked');
Hope this helps.

More Answers (0)

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!