Matplotlib: длина строки в экспорте .svg

Я рисую многоугольник в matplotlib и экспортирую его в .svg, чтобы использовать его, например. Инкскейп. Я знаю, что вы можете указать размер изображения в дюймах, но я бы хотел, чтобы строка длиной «1» отображалась на строку длиной 1 дюйм при открытии в Inkscape.

import matplotlib.pyplot as plt

plt.close('all')

f,ax = plt.subplots(figsize=(3,3))
plt.plot([0,1],[0,0])
ax.axis('off')
plt.gca().set_position([0, 0, 1, 1])
ax.set_aspect('equal')
plt.savefig("line.svg")

введите здесь описание изображения


person CyrielN    schedule 28.03.2018    source источник


Ответы (1)


Непонятно, что здесь будет делать ax.set_aspect('equal'). Так что я бы удалил это. Далее, что вам нужно сделать, это синхронизировать систему координат осей с размером фигуры.

На данный момент из вопроса неясно, что именно вы пытаетесь сделать.

  • Создайте 3-дюймовую фигуру с 3-дюймовой линией
    Измените систему координат от 0 до 1, удалите все поля внутри осей.

    import matplotlib.pyplot as plt
    
    f,ax = plt.subplots(figsize=(3,3))
    plt.plot([0,1],[0,0])
    ax.axis('off')
    plt.gca().set_position([0, 0, 1, 1])
    ax.margins(0)
    plt.savefig("line.svg")
    

    или пусть система координат идет от 0 до 3, сделайте линию длиной 3 единицы.

    import matplotlib.pyplot as plt
    
    f,ax = plt.subplots(figsize=(3,3))
    plt.plot([0,3],[0,0])
    ax.axis('off')
    plt.gca().set_position([0, 0, 1, 1])
    ax.set_xlim(0,3)
    plt.savefig("line.svg")
    
  • Создайте 3-дюймовую фигуру с линией длиной 1 дюйм
    Измените систему координат от 0 до 1, создайте линию длиной 1/3 единицы.

    import matplotlib.pyplot as plt
    
    f,ax = plt.subplots(figsize=(3,3))
    plt.plot([0,1/.3],[0,0])
    ax.axis('off')
    plt.gca().set_position([0, 0, 1, 1])
    ax.set_xlim(0,1)
    plt.savefig("line.svg")
    

    или позвольте системе координат измениться от 0 до 3 и создайте линию длиной 1 единица.

    import matplotlib.pyplot as plt
    
    f,ax = plt.subplots(figsize=(3,3))
    plt.plot([0,1],[0,0])
    ax.axis('off')
    plt.gca().set_position([0, 0, 1, 1])
    ax.set_xlim(0,3)
    plt.savefig("line.svg")
    

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

person ImportanceOfBeingErnest    schedule 28.03.2018