How can I plot this X and Y data?
6 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Ashfaq Ahmed
il 27 Gen 2023
Commentato: Star Strider
il 27 Gen 2023
Hi coders!
I have a very simple data (Data is attached as a .mat file) set but I want to know the most efficient way of plotting it.
I have a few tide height (m) data and I want to plot this in an hour-based manner. In X axis, I want to keep hours (00:00, 01:00, .... 23:00, 24:00) and in Y-axis, I want to keep the heights. The data is in a table format and given below -
'00:00' 0.820000000000000
'01:00' 1.11600000000000
'01:48' NaN
'02:00' 1.23800000000000
'03:00' 1.11400000000000
'04:00' 0.799000000000000
'05:00' 0.428000000000000
'06:00' 0.106000000000000
'07:00' -0.0750000000000000
'07:18' NaN
'08:00' -0.0330000000000000
'09:00' 0.178000000000000
'10:00' 0.413000000000000
'11:00' 0.646000000000000
'12:00' 0.936000000000000
'13:00' 1.23000000000000
'14:00' 1.39400000000000
'14:30' NaN
'15:00' 1.33300000000000
'16:00' 1.06400000000000
'17:00' 0.704000000000000
'18:00' 0.363000000000000
'19:00' 0.101000000000000
'19:54' NaN
'20:00' -0.00200000000000000
'21:00' 0.0770000000000000
'22:00' 0.222000000000000
'23:00' 0.369000000000000
'00:00' 0.589000000000000
'01:00' 0.898000000000000
'02:00' 1.16400000000000
'03:00' 1.23200000000000
'04:00' 1.04800000000000
'05:00' 0.698000000000000
'06:00' 0.330000000000000
'07:00' 0.0420000000000000
'07:48' NaN
'08:00' -0.0820000000000000
'09:00' 0.0220000000000000
'10:00' 0.262000000000000
'11:00' 0.491000000000000
'12:00' 0.711000000000000
'13:00' 0.990000000000000
'14:00' 1.26400000000000
'15:00' 1.38800000000000
'15:12' NaN
'16:00' 1.27300000000000
'17:00' 0.959000000000000
'18:00' 0.586000000000000
'19:00' 0.259000000000000
'20:00' 0.0410000000000000
'20:30' NaN
'21:00' 0.00500000000000000
'22:00' 0.136000000000000
'23:00' 0.292000000000000
Any feedback from you will be greatly appreciated!! <3
0 Commenti
Risposta accettata
Star Strider
il 27 Gen 2023
Perhaps something like this —
LD = load(websave('Tide_Data','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1276250/Tide_Data.mat'));
Tide_info = LD.Tide_info
Tide_info.Date = datetime(Tide_info.Date, 'InputFormat','yyyy/MM/dd');
Tide_info.Time_GMT_ = datetime(Tide_info.Time_GMT_, 'InputFormat','HH:mm');
DateTime = Tide_info.Date + timeofday(Tide_info.Time_GMT_); % Combine Date & Time Variables
Tide_info = addvars(Tide_info, DateTime, 'After','Time_GMT_') % Add As A New Variable
VN = Tide_info.Properties.VariableNames;
figure
plot(Tide_info.DateTime, Tide_info.Predicted_m_)
grid
xlabel(VN{3})
ylabel(strrep(VN{4},'_','\_'))
title(strrep('Tide_info','_','\_'))
.
2 Commenti
Star Strider
il 27 Gen 2023
Thank you!
That is certainly possible, however even using retime on a timetable version of your data to take the hourly mean creates an extremely large (8760 rows) result.
LD = load(websave('Tide_Data','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1276250/Tide_Data.mat'));
Tide_info = LD.Tide_info;
Tide_info.Date = datetime(Tide_info.Date, 'InputFormat','yyyy/MM/dd');
Tide_info.Time_GMT_ = datetime(Tide_info.Time_GMT_, 'InputFormat','HH:mm');
DateTime = Tide_info.Date + timeofday(Tide_info.Time_GMT_); % Combine Date & Time Variables
Tide_info = addvars(Tide_info, DateTime, 'After','Time_GMT_'); % Add As A New Variable
VN = Tide_info.Properties.VariableNames;
TTide_info = removevars(Tide_info, [1 2]);
TTide_info = table2timetable(TTide_info);
TTide_info = retime(TTide_info, 'hourly', @(x)mean(x,'omitnan'))
figure
plot(TTide_info.DateTime, TTide_info.Predicted_m_)
grid
xlabel(VN{3})
ylabel(strrep(VN{4},'_','\_'))
title(strrep('TTide_info','_','\_'))
figure
plot(TTide_info.DateTime, TTide_info.Predicted_m_)
grid
xlabel(VN{3})
ylabel(strrep(VN{4},'_','\_'))
title(strrep('TTide_info','_','\_'))
Ax = gca;
Ax.XTick = TTide_info.DateTime(1:25,1);
xlim([TTide_info.DateTime(1,1), TTide_info.DateTime(25,1)])
It would not be possible to plot all of them in the first plot (as I plotted in the expanded second plot) and have them all visible and readable. The information is available in the ‘TTide_info’ timetable and can be plotted with either an extremely long plot, or as individual plots, such as I did here.
You can change the first plot to be the same as the second plot, however the result is likely not what you want. (Actually, I cannot even force that here, so I posted the appropriate code, however commented-out. Please experiment with it offline, since I cannot display it here.)
% figure
% plot(TTide_info.DateTime, TTide_info.Predicted_m_)
% grid
% xlabel(VN{3})
% ylabel(strrep(VN{4},'_','\_'))
% title(strrep('TTide_info','_','\_'))
% Fg = gcf;
% pos = Fg.Position;
% Fg.Position = pos + [-500 0 900 0];
% HourInterval = 6;
% Ax.XTick = TTide_info.DateTime(1:HourInterval:end,1); % Change 'HourInterval' To Plot The Desired REsult
.
Più risposte (1)
the cyclist
il 27 Gen 2023
It's unclear to me exactly what you want to plot. That file has 10,048 data points.
Here is one possibility, which puts a dot at each time point, with the time (but not the date) on the x-axis. Or, did you want to only plot a segment of the data, but not have data from different dates in the same column?
load("Tide_Data.mat")
plot(datetime(Tide_info.Time_GMT_,"InputFormat","HH:mm"),Tide_info.Predicted_m_,'.')
Vedere anche
Categorie
Scopri di più su Discrete Data Plots in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!