Зубчатый контур с использованием Matlab 2014b

Я строю некоторые карты, используя Matlab, которые используют mapshow построить границу страны из шейп-файла. Затем я экспортирую их в формат PDF и EPS, используя export_fig пакет. Это работало совершенно нормально с использованием Matlab 2014a, но я только что перешел на Matlab 2014b, чтобы воспользоваться преимуществами чего-то еще, что улучшилось, и теперь граница моей страны вся зубчатая. Граница выглядит зубчатой ​​только на сохраненных версиях файла. Если я увеличу окно рисунка, контур не будет таким.

Вот фрагменты кода, которые важны. Это пользовательский шейп-файл, поэтому я не знаю, как его здесь разместить, чтобы люди могли его воспроизвести.

Этот бит читает в шейп-файле и строит его. Тип отображения "многоугольник", если это уместно, следовательно, избавиться от 'FaceColor' так что я могу видеть то, что я рисую внизу (зеленые биты на фоне изображений, нанесенных с помощью pcolor).

thaiborder=shaperead('Thailandborder');
mapshow(thaiborder,'FaceColor','none');

Этот бит как я экспортирую фигуру.

export_fig test.eps -r600 -painters
export_fig test.pdf -r600 -painters

Это версия с гладкой каймой от Matlab 2014a:Версия 2014a

Это примерно та же самая область изображения с зубчатой ​​границей из Matlab 2014b:

Кто-нибудь знает, почему эти различия происходят? Я хочу, чтобы граница была такой, как на первом изображении, но мне нужна "улучшенная" функциональность Matlab 2014b для другой вещи в том же изображении. Что мне нужно изменить?

Изменить, чтобы добавить: я был в контакте с создателем export_fig и он думает, что это вызвано тем, что Matlab теперь использует митровые соединения, а не круглые. Видимо, я должен написать в MathWorks, чтобы пожаловаться. Я не назвал это ответом, потому что кто-то другой может предложить мне решение.

2 ответа

Матлаб признал, что это известная ошибка. Для меня первое исправление сработало.

Проблема с зубчатыми линиями на рисунках при экспорте в векторный формат является известной ошибкой в ​​MATLAB R2014b. Это связано с сочетанием линейных соединений и метрических ограничений, используемых в векторном формате.

Чтобы обойти эту проблему, используйте прикрепленные функции исправления для последующей обработки файла EPS. Вы можете использовать один из следующих способов вызова этой функции fixeps.

fixeps ('input.eps', 'output.eps', 'LJ')% Изменит линейное соединение на круглое

fixeps('input.eps','output.eps','ML') % Исправит митрэмит

function fixeps(inname,outname,fixmode)
if nargin==2
    fixmode = 'LJ';
end
fi = fopen(inname,'r');
fo = fopen(outname,'w');
tline = fgets(fi);
while ischar(tline)
    if (strcmp(tline,['10.0 ML' 10])) % Replace 10.0 miterlimit
        switch (fixmode)
            case 'LJ'
                fwrite(fo,['1 LJ' 10]); % With round linejoin
            case 'ML'
                fwrite(fo,['2.5 ML' 10]); % With smaller miterlimit
        end
    else
        fwrite(fo,tline);
    end
    tline = fgets(fi);
end
fclose(fo);
fclose(fi);

У меня была похожая проблема, вызванная параметром "MarkerSize". Похоже, что в версии 2014b он наследует единицы фигуры. Например, если у меня есть цифра в сантиметрах и я спрашиваю ('MarkerSize', 10), 10 будет интерпретироваться не как точки (как в 2014a), а как см. Я исправил это, изменив единицы измерения на pt.

Другие вопросы по тегам