2013-09-25 1 views
1

У меня есть 2 набора данных, которые я хочу построить на одном графике.Множественная ось: использование графика по строке

Первая гистограмма,:

hist(data1); 
ax1 = gca; 

Я установил следующий набор оси, у на другой стороне

ax2 = axes('Position',get(ax1,'Position'),... 
    'XAxisLocation','bottom',... 
    'YAxisLocation','right',... 
    'Color','none',... 
    'XColor','k'); 

Если я использую линию(), чтобы построить свои данные он работает:

line(data2a, data2b, 'Color', 'r', 'LineStyle', '-', 'Marker', '.', 'Parent', ax2); 

Но если я использую plot(), гистограмма стирается и обе оси отображаются слева.

plot(ax2, data2a, data2b); 

Может кто-нибудь выяснить, почему вторая ось недействительна для графика()?

+0

В общем, вы можете помочь людям ответить на ваш вопрос, показывая воспроизводимую проблему (так что мы можем просто скопируйте вставьте код). В этом случае нам нужно было бы угадать, что такое 'data1', например. Если вам нужна дополнительная помощь или задать другие вопросы, подумайте над добавлением чего-то типа: Чтобы увидеть, что происходит, используйте 'data1 = rand (100,1)' –

ответ

4

Вы должны зарегистрироваться doc hold.

Оси в MATLAB имеют свойство «NextPlot», указывающее, что делать, когда на этой оси выдается новая функция построения графика. Значение по умолчанию для 'nextplot' равно replace, что означает, что перед тем, как нарисовано новое, существующие участки будут стерты. Используя hold(ax, 'on') или set(ax, 'nextplot', 'add'), вы можете указать, что новые сюжеты добавляются к существующим вместо их замены.

Причина, по которой line и plot ведут себя по-разному в том, что функции высокого уровня (например, plot) уважение этой оси свойство, в то время как функции низкого уровня, как line, patch и другие не делают. Они добавляются к оси в любом случае и не удаляют существующих детей.

EDIT: Теперь я заметил, что ax2 должен быть пустым, в вашем случае - может быть, просто попробуйте выше, тем не менее;)

Смежные вопросы