Error using Bar, X must be same Length as Y.
조회 수: 72 (최근 30일)
이전 댓글 표시
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
Adam Danz
2020년 5월 25일
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.
채택된 답변
Adam Danz
2019년 6월 24일
편집: Adam Danz
2019년 9월 30일
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
Ulises Alejandro Aregueta Robles
2019년 9월 30일
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
2019년 9월 30일
편집: Adam Danz
2019년 9월 30일
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.
추가 답변 (2개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Line Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!