Если я продлить немного укусил свой пример, чтобы получить что-то я могу сюжет, я воспроизвести проблему:
[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
объекты и эти объекты имеют тенденцию «закрывать» себя (они создадут линию между первой и последней точками, определенными в их профиле).
Это легче соблюдать, если вы не завершите определение вашего профиля на 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
Окажет:
Это хорошая идея, чтобы сохранить ручку hc2
в случае, если вы хотите измените свойства изолиний (цвет, стиль, толщина и т. д.).
Также указывается уровень изолинии. Таким образом, вы можете убедиться, что оба contour
и contourf
будут использовать тот же набор isovalues. Вероятно, это может работать без этого (потому что базовый набор данных одинаковый), но лично я всегда предпочитаю быть явным и не полагаться на фоновые вычисления.
Посмотрите на свойства осей. Должна быть опция. (http://www.mathworks.com/help/matlab/ref/axes-properties.html) –
Опубликовать еще несколько строк кода для воспроизведения проблемы –
@ LuisMendo минимальный пример, опубликованный в ответ на benoit before, был достаточным чтобы воспроизвести проблему, вы все еще можете ее увидеть? – thewaywewalk