Сюжет Python: Как я могу заставить matplotlib.pyplot перестать форсировать стиль моих маркеров? - PullRequest
11 голосов
/ 13 февраля 2009

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 12 марта 2009

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

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

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

6 голосов
/ 08 августа 2009

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

Вы также можете играть с опцией markersize, с этой формой?

2 голосов
/ 13 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...