2015-01-30 4 views
3

Я использовал Matlab для создания полярной координаты и преобразовал ее в декартовую координату.Удаление краевой линии на контурном графике

[th,r] = meshgrid((0:0.5:360)*pi/180,0:.02:1); 
[X,Y] = pol2cart(th,r); 

получить данные по этой сетке и производит contourf участка над ним.

Моя проблема заключается в том, что я получаю осевую линию в моем contourf сюжет, который я хотел бы удалить, может кто поможет мне с этим

enter image description here

Спасибо

+0

Посмотрите на свойства осей. Должна быть опция. (http://www.mathworks.com/help/matlab/ref/axes-properties.html) –

+4

Опубликовать еще несколько строк кода для воспроизведения проблемы –

+0

@ LuisMendo минимальный пример, опубликованный в ответ на benoit before, был достаточным чтобы воспроизвести проблему, вы все еще можете ее увидеть? – thewaywewalk

ответ

5

Если я продлить немного укусил свой пример, чтобы получить что-то я могу сюжет, я воспроизвести проблему:

[th,r] = meshgrid((0:0.5:360)*pi/180,0:.02:1); 
[X,Y] = pol2cart(th,r); 
Z = sqrt(X.^2 + Y.^2) ; 

isoLevel = 0:0.1:10 ; 
[C ,hc] = contourf(X,Y,Z,isoLevel) ; 

черная линия на границе раздела происходит потому, фу nction contourf create patch объекты и эти объекты имеют тенденцию «закрывать» себя (они создадут линию между первой и последней точками, определенными в их профиле).

examplereproduced

Это легче соблюдать, если вы не завершите определение вашего профиля на 360 градусов. На рисунке справа показан тот же пример, но с сеткой только от 0:350 и с LineStyle, установленным на :.

Как вы можете видеть, трудно контролировать, каким образом Matlab фактически отобразит этот конкретный предел профиля. Существуют способы управления конкретными ребрами объектов patch, но в этом случае он будет включать поиск дескриптора каждого объекта патча (10 в моем случае, но еще много в более сложных случаях), определение края, который вы хотите контролировать, и в основном переопределение патча (каждый из них). Тебе лучше рисовать патчи с нуля.


К счастью, есть простой путь выхода из этого: Избавиться от всех патч краевых линий ...

, но тогда вы можете пропустить ваши изолинии! Нет проблем, просто нарисуйте их поверх патчей! Вы получаете все свои цветные патчи (без рамки) и набор (iso) линий, над которыми вы имеете полный контроль.

Два простых способа получить патч без линий (i) установить затенение на shading flat или (ii) указать 'EdgeColor','none' в параметре функции contourf.

Чтобы получить ваши изолинии сверху, используйте сестра contour.

Таким образом, используя одни и те же X, Y и Z данных, чем ранее:

isoLevel = 0:0.1:10 ; 
[C ,hc] = contourf(X,Y,Z,isoLevel,'EdgeColor','none') ; %// set of patches without border 
% shading flat %// use that if you didn't specify ('EdgeColor','none') above 
hold on 
[C2 ,hc2] = contour(X,Y,Z,isoLevel,'LineColor','k') ; %// now get your isolines 

Окажет:

patchlineOK

Это хорошая идея, чтобы сохранить ручку hc2 в случае, если вы хотите измените свойства изолиний (цвет, стиль, толщина и т. д.).

Также указывается уровень изолинии. Таким образом, вы можете убедиться, что оба contour и contourf будут использовать тот же набор isovalues. Вероятно, это может работать без этого (потому что базовый набор данных одинаковый), но лично я всегда предпочитаю быть явным и не полагаться на фоновые вычисления.

+0

Очень хорошая работа !! –

+0

@ LuisMendo. спасибо, я не знал, что уже существует «минимальный пример» (только для счастливых пользователей 10 000 пользователей ;-), пока я не прочитаю все верхние комментарии, поэтому мне пришлось составлять один. Я был удивлен, что стиль патч-линии даже не «вел себя» полностью. Мне было бы интересно узнать, имеет ли этот предел края патча ту же проблему на _2014b_, – Hoki

+0

. Минимальный пример Benoit был похож на ваш, но с четвертым аргументом 'contourf'. Минимальный пример должен был быть действительно предоставлен OP, хотя –

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