2015-03-04 2 views
2

Можно ли выводить постскриптум в Matplotlib? Например, эта маленькая площадь:рендеринг постскриптум с matplotlib

newpath 
0 0 moveto 
1 0 lineto 
1 1 lineto 
0 1 lineto 
0 0 lineto 
stroke 

Я хочу, чтобы загрузить этот код в Matplotlip и вынести его на IPython (просто пример).

+0

Если вы просто хотите, чтобы показать цифры PostScript в IPython, вы могли бы рассмотреть PostCanvas: http://www.feiri.de/pcan/ – Alan

ответ

2

Matplotlib имеет интерфейс Path, который работает очень похоже: http://matplotlib.org/users/path_tutorial.html

Но вам придется загрузить текст и сделать некоторые munging себя. Но рассмотрим этот пример:

import matplotlib.path as mpath 
import matplotlib.patches as patches 
import matplotlib.pyplot as plt 

Начните с текста, как строки, из вашего примера.

instr = """newpath 
0 0 moveto 
1 0 lineto 
1 1 lineto 
0 1 lineto 
0 0 lineto 
stroke""" 

Разделить на разрывы и удалить первую и последнюю строку. Возможно, последнее должно использоваться для окончательного форматирования?

verts = instr.split('\n')[1:-1] 
verts 

Преобразование каждой строки в координату и код.

code_lookup = {'moveto': mpath.Path.MOVETO, 
       'lineto': mpath.Path.LINETO} 

coords = [(i.split(' ')[0], i.split(' ')[1]) for i in verts] 
codes = [code_lookup[i.split(' ')[2]] for i in verts] 

# set the last code to close the polygon 
codes[-1] = mpath.Path.CLOSEPOLY 

Построить многоугольник.

mypath = mpath.Path(coords, codes) 
mypatch = patches.PathPatch(mypath, facecolor='orange', lw=2) 

Запланируйте результат.

fig, ax = plt.subplots(subplot_kw={'aspect': 1.0, 
            'xlim': [-1,2], 
            'ylim': [-1,2]}) 


ax.add_patch(mypatch) 

enter image description here

+0

это все замечательно, но то, что я прошу это общий способ преобразования всех постскриптумов в сюжет. спасибо за то, что указали на путь api-решения, но не очень хорошо это знали. – grokkaine

+0

Это действительно ядро ​​postscript. Если вы проверите этот [мой старый поток] (https://groups.google.com/d/topic/comp.lang.postscript/wrkPdGdw8cE/discussion), то сердце модели шаблона трафарета/краски Warnock/Wyatt - это единственная функция 'DisplayConvexPolygon', которая выполняет шаги по трансформации-> отсечения->. Все остальное построено поверх этого. (Игнорирование проблем синтаксиса) –