Matlab: использовать сюжет и полулогию на одном графике (Matlab 2014) - PullRequest
2 голосов
/ 24 марта 2019

Я хочу использовать сюжет и полулог на одном графике для сравнения результатов. Я получаю только один сигнал, хотя использую функцию удержания. Что я могу сделать ? Я не могу использовать yyaxis слева, потому что мой matlab ниже чем 2016. Любая помощь?

Вот мой код:

figure
semilogy(VG, ID3)
hold on
plot(VG, ID3)
hold off

Ответы [ 2 ]

3 голосов
/ 24 марта 2019

Возможным решением для того, чтобы линейная и полулоговая диаграммы были в одном графике, было бы создание двух перекрывающихся графиков:

  • на первом вы можете нанести данные с линейной шкалой
  • на втором вы можете построить данные с логарифмической шкалой либо по оси x, либо по оси

Основные шаги:

  • создать figure
  • создайте первый axes на рисунке
  • установить цвет осей на тот же цвет, который используется для данных, это поможет распознать данные
  • выведите данные с plot
  • создайте вторую axes на рисунке и установите его размер равным одной из первых осей (теперь вторые оси являются "активными")
  • переместить положение оси X в верхнюю часть графика
  • переместить местоположение Yaxis справа от графика
  • выведите данные с помощью semilogy
  • установить цвет осей на тот же цвет, который используется для данных, это поможет распознать данные
  • добавить заголовок, легенду и метки x / y

Поскольку мы изменили расположение осей X и Y вторых осей, нам необходимо отрегулировать размеры фигуры и осей так, чтобы они соответствовали друг другу

Теперь вы можете решить проблему разной сетки двух осей:

для этого вы можете добавить пункт меню в строку меню (с функцией uimenu), чтобы переключать сетку

В дальнейшем возможна реализация предложенного подхода.

Поскольку вы не указали, используете ли вы R2014a или R014b, в приведенном ниже коде вы можете найти и способ установки свойств фигуры и осей:

  • «старый» способ: использование get / set
  • «новый» dot notation от R2014b

(последний "прокомментирован")

% Define input data
x=linspace(0,30,30)
y=rand(30, 1);

% Cretate a Figure
f=figure('units','normalized')

% Create the first axes in the figure
ax1=axes
% Plot the data with "PLOT"
ph=plot(x,y,'r')
% Set the axis labeks
xlabel('X data')
ylabel('Y data, LIN mode')
% Get the position of the first axes
% % % % % % % % % % % % % % % % % % % % % % % % ax1_pos=ax1.Position
ax1_pos=get(ax1,'position')
% Set the color of the fist axes
% % % % % % % % % % % % % % % % % % % % % % % % ax1.XColor='r'
% % % % % % % % % % % % % % % % % % % % % % % % ax1.YColor='r'
set(ax1,'xcolor','r','ycolor','r')

% Add the second axes in the figure
ax2=axes('position',ax1_pos)
% Plot the data with SEMILOGY
slh=semilogy(x,y,'b')
% Set the ylabel
ylabel('Y data, LOG mode')
% Set the title of the chrt
title('Linear and Semilog Plot')

% Move the X axis location to the top of the chart
% % % % % % % % % % % % % % % % % % % % % % % % ax2.XAxisLocation='top'
set(ax2,'XAxisLocation','top')
% Move the XYaxis location to the right of the chart
% % % % % % % % % % % % % % % % % % % % % % % % ax2.YAxisLocation='right'
set(ax2,'YAxisLocation','right')
% Set the color of the second axes to transparent
% % % % % % % % % % % % % % % % % % % % % % % % % ax2.Color='none'
set(ax2,'color','none')
% Set the color of the second axes
% % % % % % % % % % % % % % % % % % % % % % % % % ax2.XColor='b'
% % % % % % % % % % % % % % % % % % % % % % % % % ax2.YColor='b'
set(ax2,'xcolor','b','ycolor','b')
% Add the lgend to the chart
legend([ph slh],'plot','semilogy','location','best')

% Adjust the size of the the first axes
% % % % % % % % % % % % % % % % % % % % % % % % ax1.Position=[ax1_pos(1) ax1_pos(2) ax1_pos(3)*.9 ax1_pos(4)*.9]
set(ax1,'position',[ax1_pos(1) ax1_pos(2) ax1_pos(3)*.9 ax1_pos(4)*.9])
% et the size of the second axes as per the first one
ax2.Position=ax1.Position
set(ax2,'position',[ax1_pos(1) ax1_pos(2) ax1_pos(3)*.9 ax1_pos(4)*.9])

% Adjust the size of the figure
% % % % % % % % % % % % % % % % % % % % % % % % % % % fp=f.Position
fp=get(f,'position')
% % % % % % % % % % % % % % % % % % % % % % % % % % % f.Position=[0.1,0.1,fp(3)*1.2,fp(4)*1.2]
set(f,'position',[0.1,0.1,fp(3)*1.2,fp(4)*1.2])

% Add the menu to manage the grid
mh=uimenu('Label','Grid manag.')
m1h=uimenu(mh,'Label','Linear Grid','callback', ...
   'axes(ax1);grid;axes(ax2);if(strcmp(m1h.Checked,''off'')),m1h.Checked=''on'';else,m1h.Checked=''off'';end')
m2h=uimenu(mh,'Label','Log Grid','callback', ...
   'axes(ax2);grid;if(strcmp(m2h.Checked,''off'')),m2h.Checked=''on'';else,m2h.Checked=''off'';end')

enter image description here

1 голос
/ 24 марта 2019

Мне часто приходится составлять цифры, сравнивая данные в линейном и логарифмическом пространстве.Укладка графиков с использованием subplot() дает хороший визуальный эффект.Пример:

% set up dummy data that is evenly-space in logspace
x = 10.^((linspace(log10(.01), log10(10),20))');
y = rand(20, 1);
% finish setup

figure

subplot(2,1,1)
plot(x, y, 'DisplayName', 'MyData')
title('Plot with Linear Axes')
xlabel('X-Axis')
ylabel('Y-Axis')
grid on
set(legend, 'Location', 'best')

subplot(2,1,2)
semilogx(x, y, 'DisplayName', 'MyData')
title('Plot with LogX Axis')
xlabel('LogX-Axis')
ylabel('Y-Axis')
grid on
set(legend, 'Location', 'best')

Выше приведено следующее: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...