plot 2 different time data on the same axis in same graph
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Abhijit Sardar
am 29 Jan. 2021
Kommentiert: Abhijit Sardar
am 30 Jan. 2021
I have 2 dataset to plot both wrt to time axis in the same plot but time data is different for both the data. on yaxis 1 I want DATA1(line) on yaxis 2 i want DATA2(buuble markers) how can i do so. I am attaching the data file
2 Kommentare
Akzeptierte Antwort
J. Alex Lee
am 30 Jan. 2021
Bearbeitet: J. Alex Lee
am 30 Jan. 2021
To overcome the merged legend issue, you can create an empty plot to make the legend entry
T = readtable('TIMEDATA.txt');
fig = gcf;
ax(1) = axes(fig,'NextPlot','add');
ax(2) = axes(fig,'NextPlot','add',...
'XAxisLocation','top',...
'YAxisLocation','right',...
'Color','none');
Colors = lines(2);
for i = 1:2
xlabel(ax(i),"Time"+i)
ylabel(ax(i),"Data"+i)
ax(i).XColor = Colors(i,:);
ax(i).YColor = Colors(i,:);
end
h(1) = plot(ax(1), T.TIME1, T.DATA1, 'Displayname', 'DATA1','Color',Colors(1,:));
h(2) = plot(ax(1), nan, nan, 'Displayname', 'DATA2','Color',Colors(2,:));
% either manually set the other plot in the other axes to be the same
% h2copy = plot(ax(2),T.TIME2, T.DATA2,'Displayname','DATA2','Color',Colors(2,:));
% or do it this way if you want to keep things synced without needing to track your changes
h2copy = copyobj(h(2),ax(2));
h2copy.XData = T.TIME2;
h2copy.YData = T.DATA2;
legend(ax(1),h, 'Location', 'northwest')
% compute axes positions in a kind of naive way if you want to label the axes
pos = reshape([ax.Position],4,2)'
AxPos = [max(pos(:,1),[],1),max(pos(:,2),[],1),min(pos(:,3:4),[],1)]
set(ax,'Position',AxPos)
Weitere Antworten (2)
Walter Roberson
am 29 Jan. 2021
T = readtable('TIMEDATA.txt');
yyaxis right
plot(T.TIME2, T.DATA2, 'Displayname', 'DATA2')
yyaxis left
plot(T.TIME1, T.DATA1, 'Displayname', 'DATA1')
legend show
1 Kommentar
Walter Roberson
am 29 Jan. 2021
You might notice that is not very useful. The reason is that you used a single x axes even though the x values are fairly different.
T = readtable('TIMEDATA.txt');
fig = gcf;
ax1 = axes(fig);
h(1) = line(ax1, T.TIME1, T.DATA1, 'Displayname', 'DATA1', 'color', 'k');
legend(h(1), 'Location', 'northwest')
ax1_pos = ax1.Position; % position of first axes
ax2 = axes('Position',ax1_pos,...
'XAxisLocation','top',...
'YAxisLocation','right',...
'Color','none');
h(2) = line(T.TIME2, T.DATA2, 'parent', ax2, 'Displayname', 'DATA2', 'color', 'b');
legend(h(2), 'Location', 'northeast')
Unfortunately in order to get the axes in the right location, it becomes a challenge to get a merged legend.
Siehe auch
Kategorien
Mehr zu Data Distribution 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!