Как заставить matplotlib pyplot сгенерировать диаграмму для просмотра / вывода в .png с определенным разрешением? - PullRequest
4 голосов
/ 16 ноября 2011

Мне надоело вручную создавать графики в Excel, и, следовательно, я пытаюсь автоматизировать процесс, используя Python для преобразования данных .csv в работоспособную форму и matplotlib для построения результата.

Использование matplotlib и их генерация не проблема, но я не могу понять, как установить соотношение сторон / разрешение вывода.

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

  • Ограниченные области графика (небольшая область, покрытая легендой, осями и т. Д.).
  • Неправильное соотношение сторон.
  • Большие пробелы по сторонам области диаграммы (я хочу очень широкое / не очень высокое изображение).

Если у кого-нибудь есть примеры, показывающие, как этого добиться, я был бы очень признателен!

Ответы [ 3 ]

5 голосов
/ 16 ноября 2011

Вы можете управлять соотношением сторон с помощью ax.set_aspect:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax=fig.add_subplot(1,1,1)
ax.set_aspect(0.3)
x,y=np.random.random((2,100))
plt.scatter(x,y)    

Другой способ установить соотношение сторон (уже упоминавшийся jterrace ) - это использовать параметр figsize в plt.figure: например, fig = plt.figure(figsize=(3,1)). Однако два метода немного отличаются: фигура может содержать много осей. figsize контролирует соотношение сторон для всей фигуры, тогда как set_aspect контролирует соотношение сторон для конкретной оси.

Далее вы можете обрезать неиспользуемое пространство вокруг участка с помощью bbox_inches='tight':

plt.savefig('/tmp/test.png', bbox_inches='tight')

enter image description here

Если вы хотите избавиться от лишнего пустого пространства из-за автоматического выбора matplotlib x-range и y-range, вы можете вручную установить их с помощью ax.set_xlim и ax.set_ylim:

ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

enter image description here

3 голосов
/ 16 ноября 2011

Соотношение сторон / Размер графика

Самый простой способ, который я нашел, это установить для параметра figsize значение figure при создании фигуры. Например, для этого значения будет 4 дюйма в ширину и 3 дюйма в высоту:

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(4,3))

Регулировка расстояния

Для этого есть функция с именем subplots_adjust , которая позволяет изменять ограничивающую область самого графика, оставляя больше места для заголовка, осей и меток. Вот пример из одного из моих графиков:

plt.gcf().subplots_adjust(bottom=0.15, left=0.13, right=0.95, top=0.96)
0 голосов
/ 16 ноября 2011

Для разрешения вы можете использовать аргумент dpi (точек на дюйм) при создании фигуры или в функции savefig (). Для высококачественной печати графики рекомендуется dpi = 600 или более.

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