текст шкалы matplotlib (фигурные скобки) - PullRequest
0 голосов
/ 26 апреля 2018

Я хотел бы использовать фигурные скобки '}' на моем графике, имеющие разную высоту, но одинаковую ширину. Пока что при масштабировании текста ширина масштабируется пропорционально:

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
ax.text(0.2, 0.2, '}', fontsize=20)
ax.text(0.4, 0.2, '}', fontsize=40)
plt.show()

Единственная идея, которая приходит мне в голову, - это наложение изображений фигурных скобок на изображение matplotlib, например, используя svgutils, как в При импорте файла SVG фигура matplotlib , но это громоздко.

Идеально подходит решение с векторной графикой.

1 Ответ

0 голосов
/ 26 апреля 2018

Чтобы получить письмо в масштабе только в одном измерении, например Высота, но сохраняя другой размер постоянной, вы можете создать фигурную скобку как TextPath. Это может быть предоставлено в качестве ввода для PathPatch. И PathPatch можно масштабировать произвольно, используя matplotlib.transforms.

import matplotlib.transforms as mtrans
from matplotlib.text import TextPath
from matplotlib.patches import PathPatch

import matplotlib.pyplot as plt
fig, ax = plt.subplots()

def curly(x,y, scale, ax=None):
    if not ax: ax=plt.gca()
    tp = TextPath((0, 0), "}", size=1)
    trans = mtrans.Affine2D().scale(1, scale) + \
        mtrans.Affine2D().translate(x,y) + ax.transData
    pp = PathPatch(tp, lw=0, fc="k", transform=trans)
    ax.add_artist(pp)

X = [0,1,2,3,4]
Y = [1,1,2,2,3]
S = [1,2,3,4,1]

for x,y,s in zip(X,Y,S):
    curly(x,y,s, ax=ax)

ax.axis([0,5,0,7])
plt.show()

enter image description here

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