Построение Python: как я могу заставить matplotlib.pyplot прекратить принудительное использование стиля моих маркеров?

Я пытаюсь построить кучу точек данных (многие тысячи) в Python, используя matplotlib, поэтому мне нужно каждый маркер должен быть очень маленьким и точным. Как мне получить самый маленький самый простой маркер из возможных? Я использую эту команду для построения своих данных:

 matplotlib.pyplot( x , y ,'.',markersize=0.1,linewidth=None,markerfacecolor='black')

Тогда я могу посмотреть его либо с помощью pl.show(), а затем сохранить. Или используйте plt.savefig('filename.ps') в коде, чтобы сохранить его. Проблема в следующем: когда я использую pl.show() для просмотра файла в графическом интерфейсе, он отлично выглядит с маленькими крошечными черными отметками, однако, когда я сохраняю из show() графического интерфейса в файл или использую напрямую savefig, а затем просматриваю созданный мной ps, он выглядит иначе. ! Каждый маркер получил небольшой синий ореол вокруг себя (как будто он начинался в каждой точке, чтобы соединить их с синими линиями по умолчанию, но этого не произошло), и стиль полностью неправильный. Почему меняет стиль при сохранении? Как мне остановить python от принудительного изменения стиля маркеров? И да, я просмотрел некоторые альтернативные пакеты, такие как CairoPlot, но я хотите пока продолжать использовать matplotlib.

Обновление. Оказывается, что при сохранении в PNG цвета сначала становятся нормальными, но это приводит к преобразованию изображения, когда я хочу сохранить его снова как .ps позже (для включения в PDF ) а потом теряю качество. Как сохранить векторный характер файла и получить правильное форматирование?


person Alex    schedule 13.02.2009    source источник
comment
Что ж, для построения точек в основной версии CairoPlot есть класс ScatterPlot. Используя это, вы можете определить радиус маркера, поэтому вы можете просто установить его на 1, так как это будет наименьший вариант. Есть ли у вас какие-либо особые причины не использовать CairoPlot?   -  person Rodrigo    schedule 13.02.2009


Ответы (3)


Для получения красивого векторизованного вывода не используйте стиль маркера '.'. Используйте, например, 'o' (круг) или 's' (квадрат) (параметры см. В help(plot)) и установите аргумент ключевого слова markersize на что-нибудь подходящее небольшое, например:

plot(x, y, 'ko', markersize=2)
savefig('foo.ps')

То, что '.' (точка) дает менее хорошие результаты, может быть истолковано как ошибка в matplotlib, но тогда что должно означать "точка" в формате векторной графики?

person Jouni K. Seppänen    schedule 12.03.2009

Вы пробовали форму ',' точки? Он создает «пиксели» (маленькие точки вместо фигур).

Можно поиграть и с опцией markersize, с этой формой?

person Eric O Lebigot    schedule 08.08.2009

Если нет, попробуйте сохранить в движке растеризации - сохраните его в файл PNG и посмотрите, исправит ли это его. Если вам нужен векторный график, попробуйте сохранить его в PDF и конвертировать с помощью внешней утилиты. Раньше у меня также были проблемы с движком PS, которые решались путем сохранения с движками Agg или PDF и конвертации извне.

person Matt    schedule 13.02.2009
comment
Да, эта работа работает. Кстати, мы делаем такую ​​же работу. - person Alex; 14.02.2009