Error using Bar, X must be same Length as Y.
58 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Matt Glowacki
el 24 de Jun. de 2019
Comentada: Adam Danz
el 25 de Mayo de 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 comentarios
Adam Danz
el 25 de Mayo de 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.
Respuesta aceptada
Adam Danz
el 24 de Jun. de 2019
Editada: Adam Danz
el 30 de Sept. de 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 comentarios
Ulises Alejandro Aregueta Robles
el 30 de Sept. de 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
el 30 de Sept. de 2019
Editada: Adam Danz
el 30 de Sept. de 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.
Más respuestas (2)
Ver también
Categorías
Más información sobre Line Plots en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!