Can I create stackedplot with arrays of different row lengths?

3 visualizaciones (últimos 30 días)
Kristine
Kristine el 10 de Mzo. de 2025
Comentada: dpb el 13 de Mzo. de 2025
Hi,
I’m trying to compare three sets of data, all with different amounts of data, but all associated with the same days.
Data Sets Example:
Tbl1 = [Date’ ’tides; 06-03-0.02 ; 06-032.0 ; 06-030.07 ; 06-04-0.9 ; 06-042.3 ; 06-040.7 ; 06-05-0.1 ; ]
Tbl2 = [Date’ ’temp; 06-0317 ; 06-0320 ; 06-0415 ; 06-0421 ; 06-0515 ; 06-0522 ; 06-0614 ; ]
Tbl3 = [Date’ ’ESD; 06-030.2 ; 06-040.5 ; 06-050.4 ; 06-060.1 ; 06-070.1 ; 06-080.5 ; 06-090.4 ; ]
I can’t easily overlap three graphs with very different y-axis on one plot, so I thought stackedplot was my next best bet.
figure (1)
stackedplot(Tbl1, Tbl2, Tbl3)
When I try to graph I get an error: X must have length equal to the number of rows in Y. I think this means my sets of data are all different lengths.
Any suggestions? Thanks!
  3 comentarios
Walter Roberson
Walter Roberson el 12 de Mzo. de 2025
Tbl1 = [Date’ ’tides; 06-03-0.02 ; 06-032.0 ; 06-030.07 ; 06-04-0.9 ; 06-042.3 ; 06-040.7 ; 06-05-0.1 ; ]
Note that this uses [] to concatenate character vectors and numeric constants. According to the conversion rules for [], the numeric constants will be converted by using char(uint16()) applied to the numeric constant, so you are going to end up with results along the lines of
'Datetides'
'06-03<char 0>'
'06-03<char 2>'
'06-03<char 0>'
which is then going to fail because the rows are not all the same number of characters.
You would have been much better off if you used Tabl1 = { ....}
dpb
dpb el 13 de Mzo. de 2025
"You would have been much better off if you used Tabl1 = { ....}"
or even better to have read the data from a text or spreadsheet file instead with much more amenable tools for editing data.

Iniciar sesión para comentar.

Respuestas (2)

dpb
dpb el 11 de Mzo. de 2025
Movida: dpb el 11 de Mzo. de 2025
Augment each shorter dataset to the length of the longest with NaT for the time and NaN for the data. The plotting routines will then ignore the missing data points but be the same length to be able to put together in one table or catenate arrays.
  2 comentarios
Kristine
Kristine el 11 de Mzo. de 2025
Is there any way to do this in MATLAB, or would I have to do this by hand via Exel? It would take me a while to spread out the data and create gaps for where the shorter data sets don't have enough information.
dpb
dpb el 12 de Mzo. de 2025
Of course it can be done in MATLAB and much more simply than in Excel...
Walter shows probably the better way if the difference is that there are different timestamps between the three and not just that some are shorter than the others.
There's a fundamental issue in your data as posted, however, in that you have Date data only to the day and multiple values of the same day wiithout the time information to go with it. Thus, all of those are going to fall exactly at 00:00:00 on the given day, not be different times of day. That's an issue only you know how you may be able to deal with getting the needed times.
To illustrate ways here is problematical because
Tbl1 = [Date’ ’tides; 06-03-0.02 ; 06-032.0 ; 06-030.07 ; 06-04-0.9 ; 06-042.3 ; 06-040.7 ; 06-05-0.1 ];
Invalid text character. Check for unsupported symbol, invisible character, or pasting of non-ASCII characters.
Tbl2 = [Date’ ’temp; 06-0317 ; 06-0320 ; 06-0415 ; 06-0421 ; 06-0515 ; 06-0522 ; 06-0614 ; ]
Tbl3 = [Date’ ’ESD; 06-030.2 ; 06-040.5 ; 06-050.4 ; 06-060.1 ; 06-070.1 ; 06-080.5 ; 06-090.4 ; ]
even if we try to remove the "..." line continuation character at the end of the line(s).
Attaching the actual file would probably help...

Iniciar sesión para comentar.


Walter Roberson
Walter Roberson el 11 de Mzo. de 2025
First convert the tables into timetables, which might require converting the dates into datetime objects.
Then form the union of the datetime objects between the three tables.
Now, retime each of the tables, using the union of times as the newTimes parameter, and method 'fillwithmissing'
Now that you have a set of three time tables with the same time base, you can stackedplot them together.

Categorías

Más información sobre Line Plots en Help Center y File Exchange.

Productos


Versión

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by