[Python] Combinando e rotacionando dois patches no matplotlib

Discussão em 'Python' iniciado por Stack, Agosto 12, 2025.

  1. Stack

    Stack Membro Participativo

    Estou tentando simular um teste feito com feijões no matplotlib, e para isso estou usando duas elipses combinadas, como na figura:

    [​IMG]

    feijao = Ellipse(xy=(2,2), width=2.5, height = 2, angle = 120)
    feijao2 = Ellipse(xy=(2,2.6), width=2.5, height = 2, angle = 75)

    fig, ax = plt.subplots(subplot_kw={'aspect': 'equal'})

    ax.add_artist(feijao)
    feijao.set_facecolor('#a38d65')
    ax.add_artist(feijao2)
    feijao2.set_facecolor('#a38d65')


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

    plt.show()


    Porém eu preciso que o plot contenha mais de um feijão, e que eles variem levemente de angulação. Eu tentei utilizar a própria construção das elipses para isso, mas como cada elipse vai rotacionar em torno do seu próprio eixo, não funciona com todos os feijões.

    [​IMG]

    ang=np.random.rand(10)

    eli = [Ellipse(xy=(2+(5*i), 2+(7*j)),
    width=2.5, height=2,
    angle = ang*360)
    for i in range(10) for j in range (5)]
    eli2 = [Ellipse(xy=(2+(5*i), 2.6+(7*j)),
    width=2.5, height=2,
    angle = ang*360-45)
    for i in range(10) for j in range(5)]

    fig, ax = plt.subplots(subplot_kw={'aspect': 'equal'})

    for e in eli:
    ax.add_artist(e)
    e.set_facecolor('#a38d65')
    for e in eli2:
    ax.add_artist(e)
    e.set_facecolor('#a38d65')

    ax.set_xlim(0, 50)
    ax.set_ylim(0, 35)


    plt.show()


    Procurei na documentação e não encontrei, mas teria alguma forma de "combinar" as duas elipses que formam o feijão, e depois replicar esta formação, rotacionando as figuras?

    Continue reading...

Compartilhe esta Página