我想要一个创建绘图的函数。一旦我有了这个情节,我想在多画面中使用它。
例如,我可以创建以下函数:
def fig_1(x):
# create a new figure
fig = plt.figure()
plt.plot([1*x, 2*x, 3*x, 4*x])
return fig
之后我想要一些类似的东西:
subplot(3,2,1) = fig_1(1)
subplot(3,2,2) = fig_1(2)
subplot(3,2,3) = fig_1(3)
subplot(3,2,4) = fig_1(4)
subplot(3,2,5) = fig_1(5)
subplot(3,2,6) = fig_1(6)
为了绘制最终绘图:
from pylab import *
pdf = matplotlib.backends.backend_pdf.PdfPages("Cal8010.pdf")
for fig in xrange(1,figure().number):
这样,它就不起作用了。我能做我想做的事吗?
感谢的任何帮助
首先:我创建子图,每个子图中都有一个图:
import matplotlib.pyplot as plt
import numpy as np
def fig_1(ax, x, y):
ax.plot(x, y)
fig, ax = plt.subplots(3, 2)
for i in range(3):
for j in range(2):
x = np.random.random(10)
y = np.random.random(10)
fig_1(ax[i, j], x, y)
ax[i, j].set_title(f"Subplot #{2*i + j + 1}")
plt.show()
现在,您还可以绘制一个空数组,并将数据进一步更新到此图:
import matplotlib.pyplot as plt
import numpy as np
def fig_1(ax):
line, = ax.plot([], [])
return line
fig, ax = plt.subplots(3, 2)
lines = []
for i in range(3):
for j in range(2):
x = np.random.random(10)
y = np.random.random(10)
lines.append((fig_1(ax[i, j]), x, y))
ax[i, j].set_title(f"Subplot #{2*i + j + 1}")
for p in lines:
l, x, y = p
l.set_xdata(x)
l.set_ydata(y)
fig.canvas.draw()
fig.canvas.flush_events()
plt.show()
但这可能很棘手,因为每个图上的两个轴都不适合数据,所以图可能会越界(所以你可能需要将x和y限制固定为数据的最小值和最大值(
尊敬的审核人,
这里的解决方案,我已经制定感谢另一个帖子,我希望再次找到,以给予正确的信用。
fig, axs = plt.subplots(2,2)
def plot_ff(ax=None,data):
ax.plot(data)
return
plot_ff(axs[0, 0],data_1)
plot_ff(axs[0, 1],data_2)
plot_ff(axs[1, 0],data_3)
plot_ff(axs[0, 1],data_3)
通过这种方式,它可以工作,并且可以轻松地使用不同类型的多批次进行管理
你觉得这个解决方案怎么样?我应该删掉这些问题吗?Diego