LINUX.ORG.RU

добавить отступы от осей

 , ,


0

2

Рисую графики с помощью pylab.plot и pylab.savefig. От краев изображения сами оси отступают, чтобы были видны надписи.

А вот сами графики если они допустим на уровне нуля или максимума - сливаются с осями, оси рисуются поверх. График синий, а оси черные, создается иллюзия что график прерывается, или переполняется (выше максимума).

Есть ли способ добавить автоматическое увеличение пределов осей чтобы они не заслоняли собой график? А может вручную можно выставить, я пока не нашел как, хотя документации завались http://matplotlib.org/contents.html но я нуб и не могу этого найти. Или чтобы график рисовался поверх осей?

На десерт: можно ли изменить пропорции графика, чтобы он был не прямоугольным (например 4:3) а очень широким и невысоким?

Попробовал нарисовать так: pylab.plot(x, data, clip_on = False) - ноль эффекта. clip_on это «When False artists will be visible out side of the axes»

I-Love-Microsoft ★★★★★ ()

ЯННП. Покажи скриншот. Если что, там есть xlim, ylim, etc на самый крайний случай. Хотя, matplotlib такой адовый говнокод что для одноразовых графиков просто хоть как-то сделал это рабочим (хоть в фотошопе) и больше не парился.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

Вот скриншот, видно что максимум или минимум неразличимы вообще, хоть бы поверх осей рисовало - было бы видно.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Я не знаю как ты рисуешь графики, но, в первом приближении, ylim тебя спасёт.

Вот тут ещё посмотри (могло устареть): http://stackoverflow.com/questions/10984085/automatically-rescale-ylim-and-xl... . Ну, ты понел слова для гугления.

Но, повторюсь, matplotlib такая шляпа, можно убить неделю на отрисовку графиков (пропорции, позиционирование, шревты, axes labels, полупрозрачность, анимация, etc), а можно тупо воткнуть ylim и забыть/забить.

true_admin ★★★★★ ()

Я делал через set_xlim/set_ylim, вроде

yLim = max(abs(max(data)), abs(min(data)))

splot_graph.set_ylim([-yLim - vecOnePerc*8, yLim + vecOnePerc*8])

Сначала найти max/min в векторах и добавить/отнять пару процентов

alx777 ()
Ответ на: комментарий от alx777

На десерт: можно ли изменить пропорции графика, чтобы он был не прямоугольным (например 4:3) а очень широким и невысоким?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

На десерт: можно ли изменить пропорции графика, чтобы он был не прямоугольным (например 4:3) а очень широким и невысоким?

Можно

import matplotlib.pyplot as plt
f = plt.figure()

x = range(20)

f.set_size_inches(10, 20)
s1 = f.add_subplot(1,1,1)
s1.plot(x, map(lambda v: v*v, x))
s1.set_xlabel('x')
s1.set_ylabel('x**2')
s1.grid(True)
f.savefig("test_v.png", dpi=300)
f.clf()

f.set_size_inches(20, 10)
s1 = f.add_subplot(1,1,1)
s1.plot(x, map(lambda v: v*v, x))
s1.set_xlabel('x')
s1.set_ylabel('x**2')
s1.grid(True)
f.savefig("test_h.png", dpi=150)
f.clf()
alx777 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.