Error using Bar, X must be same Length as Y.
57 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Matt Glowacki
am 24 Jun. 2019
Kommentiert: Adam Danz
am 25 Mai 2020
I am trying to plot on a bar chart through app designer and i'm getting the following error: Error using bar (line 172)
X must be same length as Y.
My code is as below:
bar(app.UIAxesPositionBar, T_BarChart.UndlyDate, T_BarChart{:,{'TotalPosition'}}, 0.8,'FaceAlpha',0.5);
hold(app.UIAxesPositionBar,'on');
bar(app.UIAxesPositionBar, T_BarChart.UndlyDate, T_BarChart{:,{'FuturesPosition','DeltaEquivPosition'}}, 0.8,'FaceAlpha', 0.5);
The second call to bar throws the error, when i inspect the table i'm using you can see its 1x4, the first call to bar works just fine.
You can see the table contents/variables below:
K>> bar(app.UIAxesPositionBar, T_BarChart.UndlyDate, T_BarChart{:,{'FuturesPosition','DeltaEquivPosition'}}, 0.8,'FaceAlpha', 0.5);
Error using bar (line 172)
X must be same length as Y.
K>> T_BarChart.UndlyDate
ans =
datetime
01-Dec-2019
K>> T_BarChart{:,{'FuturesPosition','DeltaEquivPosition'}}
ans =
1.0e+02 *
0 -1.887165000000000
K>> T_BarChart
T_BarChart =
1×4 table
UndlyDate FuturesPosition DeltaEquivPosition TotalPosition
___________ _______________ __________________ _____________
01-Dec-2019 0 -188.7165 -188.7165
Any ideas on why i am getting the "must be the same length" error?
4 Kommentare
Adam Danz
am 25 Mai 2020
With
stem(app.UIAxes, X, Y)
length(X) must equal length(Y). According to your error message, this is not the case for your values. It makes sense, right? X and Y are pairs of values so each X needs to have a Y value and vise versa.
Akzeptierte Antwort
Adam Danz
am 24 Jun. 2019
Bearbeitet: Adam Danz
am 30 Sep. 2019
As the error indicates, x and y must be the same length. Here's a demo to understand the error:
bar(1,2) % this is OK
bar([1,2,3],[1 1 1;2 2 2]) % this is also OK because
% length([1,2,3]) = 3 and length([1 1 1;2 2 2]) = 3
bar(1,[1,2]) % this produces an error
Error using bar (line 172)
X must be same length as Y.
One solution is to specify two x values
bar([1,2], [4,5])
Another solution is to not specify the x values at all. It looks like one column is a single value while the other column might be two stacked values. In that case you can do something like this:
bar([0 5; 2 3],'stacked')
Read more about inputting matrices in bar(): https://www.mathworks.com/help/matlab/ref/bar.html
7 Kommentare
Ulises Alejandro Aregueta Robles
am 30 Sep. 2019
But then why this works with the example provided by MatLab documentation? (as below)
x = [1980 1990 2000];
y = [15 20 -5; 10 -17 21; -10 5 15];
bar(x,y,'stacked')
this is the example the matlab gives to plot stacked bars and here x is not the same length as y.
Adam Danz
am 30 Sep. 2019
Bearbeitet: Adam Danz
am 30 Sep. 2019
x and y are the same length.
x = [1980 1990 2000];
y = [15 20 -5; 10 -17 21; -10 5 15];
>> length(x)
%ans =
% 3
>> length(y)
%ans =
% 3
The length(x) function returns the length of the largest array dimension in X. In the data above, the size of x is 1x3 and the size of y is 3x3.
I updated my answer to provide an example of that, too.
Weitere Antworten (2)
Siehe auch
Kategorien
Mehr zu Line Plots 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!