这段代码
from sympy import *
x=Symbol('x')
p1 = plot(x**2,(x,-2,2))
p2 = plot(x**3,(x,-2,2))
Run Code Online (Sandbox Code Playgroud)
得到两个单独的图.
我想用matplotlib作为子图显示它们,而不是两个单独的图:
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我如何添加p1
和p2
,以便它们在matplotlib图中显示为子图?
问题是sympy Plot
会创建自己的图形和轴。这并不意味着要绘制到现有的轴上。
但是,可以在显示对称图之前用现有轴替换绘制图所用的轴。
from sympy import Symbol,plot
import matplotlib.pyplot as plt
def move_sympyplot_to_axes(p, ax):
backend = p.backend(p)
backend.ax = ax
backend.process_series()
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)
x=Symbol('x')
p1 = plot(x**2,(x,-2,2), show=False)
p2 = plot(x**3,(x,-2,2), show=False)
fig, (ax,ax2) = plt.subplots(ncols=2)
move_sympyplot_to_axes(p1, ax)
move_sympyplot_to_axes(p2, ax2)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我的解决方案不会增加p1
,p2
直接的次要情节.但是捕获并使用它们的(x,y)坐标.
import matplotlib.pyplot as plt
from sympy import symbols
import numpy as np
from sympy import symbols
from sympy.plotting import plot
# part 1
# uses symbolic plot of functions
x = symbols('x')
#p1, p2 = plot(x**2, x**3, (x, -2, 2))
# this plot will not show ...
# only produce 2 curves
p1, p2 = plot((x**2, (x, -2, 2)), \
(x**3, (x, -2, 2)), \
show=False)
# collect (x,y)'s of the unseen curves
x1y1 = p1.get_points() # array of 2D
x2y2 = p2.get_points()
# part 2
# uses regular matplotlib to plot the data
fig = plt.figure(figsize=(8, 5))
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
# do subplot 1
ax1.plot(x1y1[0], x1y1[1], 'g') # plot x**2 in green
ax1.set_xlim([-2, 2])
ax1.set_xlabel('X1')
ax1.set_ylabel('Y1')
ax1.set_title('Line1') # destroyed by another .title(); axis metho1
# do subplot 2
ax2.plot(x2y2[0], x2y2[1], 'r') # plot x**3 in red
ax2.set_xlim([-2, 2])
ax2.set_xlabel('X2')
ax2.set_ylabel('Y2')
ax2.set_title('Line2')
fig.subplots_adjust(wspace=0.4) # set space between subplots
plt.show()
Run Code Online (Sandbox Code Playgroud)
由此产生的情节:
归档时间: |
|
查看次数: |
768 次 |
最近记录: |