2015-10-10 2 views
2

Я пытаюсь извлечь данные из ezplot, но когда я сюжет извлеченных данных, я не получаю один и тот же граф (a и b разные) ...Извлечение данных из EZplot в MATLAB

Могли кто-нибудь уточняет, что случилось?

Вот код:

h = @(x,y)(x-((1/0.0175)*(y/5500)*(1+(y/5500)^9))) 
a = ezplot(h,[0,700,0,7000]); 
t = get(a,'xdata'); 
M = get(a,'ydata'); 
theta = transpose(t) 
figure 
b = plot(theta,M) 

ezplot производит

ezplot

пока plot производит

plot

Это белый я получаю путем извлечения из контура, есть еще прямая линия 3

+0

Я предлагаю добавлять два изображения, чтобы увидеть, как они отличаются. Осевые лимиты одинаковы? Почему бы не использовать 'plot' напрямую? –

ответ

2

ezplot возвращает contour объект. Чтобы извлечь данные x и y, вам необходимо использовать get(a,'contourMatrix'). Затем данные x будут находиться в первом столбце и y данные во второй колонке как

t = get(a,'contourMatrix'); 
x = t(1, :); 
y = t(2, :); 

Подставляя это вообще для примера мы получаем

h = @(x,y)(x-((1/0.0175)*(y/5500)*(1+(y/5500)^9))) 
a = ezplot(h,[0,700,0,7000]); 

t = get(a,'contourMatrix'); 
x = t(1, :); 
y = t(2, :); 

figure; 
b = plot(x, y); 
xlabel('x'); 
ylabel('y'); 
title('({x}-(({1}/{0.0175}) ({y}/{5500}) ({1}+({y}/{5500})^{9}))) = {0}'); 

Полученный ezplot является

                  ezplot

и того же от plot

                  plot

+0

Здравствуйте, спасибо за объяснение. Я пробовал только с вашим кодом, и я получаю кривую + прямую линию на той же фигуре! Я очистил все, прежде чем запускать его. – user3767791

+0

Но это действительно работает, когда я добавляю '.' после сюжета! – user3767791

+0

Выполнить 'закрыть все; очистить все; 'заранее и убедиться, что вы запускаете только мой код и ничего больше. Он отлично работает для меня, как вы можете видеть на двух изображениях. – IKavanagh

1

Вы получаете x and y axis values в призыве get(a,'xdata') и get(a,'ydata'). Именно по этой причине вы получаете прямую линию. Попробуйте вместо этого:

h = @(x,y)(x-((1/0.0175)*(y/5500)*(1+(y/5500)^9))); 
ezplot(h,[0,700,0,7000]); 
a= get(gca,'Children'); 
l=get(a,'Children'); 
t = get(l,'xdata'); 
M = get(l,'ydata'); 
theta = transpose(t); 
figure 
b = plot(theta,M); 

Источники:

  1. Handle Graphics: Modifying Plots
  2. How do I extract data from MATLAB figures?
Смежные вопросы