Собираем сюжеты Матплотлиба и Симпи - PullRequest
1 голос
/ 20 февраля 2020

Я хотел бы знать, как соединить следующие графики в одну фигуру:

import matplotlib.pyplot as plt
from sympy.plotting.plot import plot_parametric
from sympy import *
from sympy.abc import x,y,z
p1 = plt.arrow(0,0,0.5,0.5,head_width = 0.05, head_length=0.05,length_includes_head=True)
p2 = plot_parametric(cos(x),sin(x),(x,0,2*pi))

Может быть полезно знать, что можно получить доступ к осям и фигуре графиков Sympy.

fig = p2._backend.fig
ax = p2._backend.ax

Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

@ Ральф помог мне прийти к следующему ответу

import matplotlib.pyplot as plt

from sympy.plotting.plot import plot_parametric
from sympy import *
from sympy.abc import x,y,z

def move_sympyplot_to_axes(p, ax):
    backend = p.backend(p)
    backend.ax = ax
    # Fix for > sympy v1.5
    backend._process_series(backend.parent._series, ax, backend.parent)
    backend.ax.spines['right'].set_color('none')
    backend.ax.spines['bottom'].set_position('zero')
    backend.ax.spines['top'].set_color('none')
    plt.close(backend.fig)

p2 = plot_parametric(cos(x), sin(x), (x, 0, 2*pi), show=False)

fig, ax = plt.subplots(ncols=1)
ax.set_aspect('equal')

ax.arrow(0,0,0.7,0.7,head_width = 0.05, head_length=0.05,length_includes_head=True)
move_sympyplot_to_axes(p2, ax)


plt.show()
1 голос
/ 20 февраля 2020

@ ImportanceOfBeingErnest сделал основательную работу для этого ответа здесь , в котором он добавил 2 сюжетных графика к тем же осям matplotlib.

Это всего лишь небольшое изменение, чтобы получить то, что вы желание:

import matplotlib.pyplot as plt

from sympy.plotting.plot import plot_parametric
from sympy import *
from sympy.abc import x,y,z

def move_sympyplot_to_axes(p, ax):
    backend = p.backend(p)
    backend.ax = ax
    # Fix for > sympy v1.5
    backend._process_series(backend.parent._series, ax, backend.parent)
    backend.ax.spines['right'].set_color('none')
    backend.ax.spines['bottom'].set_position('zero')
    backend.ax.spines['top'].set_color('none')
    plt.close(backend.fig)

p2 = plot_parametric(cos(x), sin(x), (x, 0, 2*pi), show=False)

fig, (ax, ax2) = plt.subplots(ncols=2)

ax.arrow(0,0,0.5,0.5,head_width = 0.05, head_length=0.05,length_includes_head=True)
move_sympyplot_to_axes(p2, ax2)

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