plot 2 different time data on the same axis in same graph

4 ビュー (過去 30 日間)
Abhijit Sardar
Abhijit Sardar 2021 年 1 月 29 日
コメント済み: Abhijit Sardar 2021 年 1 月 30 日
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 件のコメント
Walter Roberson
Walter Roberson 2021 年 1 月 29 日
See yyaxis left and yyaxis right
Abhijit Sardar
Abhijit Sardar 2021 年 1 月 29 日
i am using the same but giving error. can please check the data

サインインしてコメントする。

採用された回答

J. Alex Lee
J. Alex Lee 2021 年 1 月 30 日
編集済み: J. Alex Lee 2021 年 1 月 30 日
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)

その他の回答 (2 件)

J. Alex Lee
J. Alex Lee 2021 年 1 月 29 日
or potentially you are just looking for "hold on"
  1 件のコメント
Abhijit Sardar
Abhijit Sardar 2021 年 1 月 29 日
no hold on does not work. i want 2 different time data to be represented on the same axis please see the attachment you will understand

サインインしてコメントする。


Walter Roberson
Walter Roberson 2021 年 1 月 29 日
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 件のコメント
Walter Roberson
Walter Roberson 2021 年 1 月 29 日
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.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeGraphics Object Properties についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by