如何告诉Matplotlib 创建第二个(新的)plot,然后再在旧的 plot 上绘图?

我想绘制数据,然后创建一个新的图形和plot data2,最后回到原来的plot和plot data3,就像这样:

import numpy as np
import matplotlib as plt


x = arange(5)
y = np.exp(5)
plt.figure()
plt.plot(x, y)


z = np.sin(x)
plt.figure()
plt.plot(x, z)


w = np.cos(x)
plt.figure("""first figure""") # Here's the part I need
plt.plot(x, w)

供你参考我如何告诉matplotlib我已经完成了一个情节?做了类似的事情,但不是完全一样!它不允许我进入原始的区域。

501442 次浏览

当你调用figure时,简单地给绘图编号。

x = arange(5)
y = np.exp(5)
plt.figure(0)
plt.plot(x, y)


z = np.sin(x)
plt.figure(1)
plt.plot(x, z)


w = np.cos(x)
plt.figure(0) # Here's the part I need
plt.plot(x, w)

编辑:请注意,您可以按照自己的意愿为图形编号(这里从0开始),但如果您在创建新图形时完全不提供数字,则自动编号将从1开始(根据文档,“Matlab样式”)。

然而,编号从1开始,因此:

x = arange(5)
y = np.exp(5)
plt.figure(1)
plt.plot(x, y)


z = np.sin(x)
plt.figure(2)
plt.plot(x, z)


w = np.cos(x)
plt.figure(1) # Here's the part I need, but numbering starts at 1!
plt.plot(x, w)

同样,如果你在一个图形上有多个轴,比如子图,使用axes(h)命令,其中h是所需轴对象的句柄,以关注该轴。

(还没有评论权限,抱歉新答案!)

如果您发现自己经常做这样的事情,那么研究matplotlib的面向对象接口可能是值得的。在你的情况下:

import matplotlib.pyplot as plt
import numpy as np


x = np.arange(5)
y = np.exp(x)
fig1, ax1 = plt.subplots()
ax1.plot(x, y)
ax1.set_title("Axis 1 title")
ax1.set_xlabel("X-label for axis 1")


z = np.sin(x)
fig2, (ax2, ax3) = plt.subplots(nrows=2, ncols=1) # two axes on figure
ax2.plot(x, z)
ax3.plot(x, -z)


w = np.cos(x)
ax1.plot(x, w) # can continue plotting on the first axis

它有点啰嗦,但更清楚,更容易跟踪,特别是有几个数字,每个数字都有多个子图。

我发现的一种方法是创建一个函数,该函数获得data_plot矩阵,文件名和顺序作为参数,从给定的数据中创建箱线图(不同的顺序=不同的图),并将其保存在给定的file_name下。

def plotFigure(data_plot,file_name,order):
fig = plt.figure(order, figsize=(9, 6))
ax = fig.add_subplot(111)
bp = ax.boxplot(data_plot)
fig.savefig(file_name, bbox_inches='tight')
plt.close()

这里接受的答案是使用面向对象的接口 (matplotlib),但答案本身包含了一些MATLAB-style接口 (matplotib.pyplot)。

如果你喜欢这样,可以使用完全面向对象方法:

import numpy as np
import matplotlib


x = np.arange(5)
y = np.exp(x)
first_figure      = matplotlib.figure.Figure()
first_figure_axis = first_figure.add_subplot()
first_figure_axis.plot(x, y)


z = np.sin(x)
second_figure      = matplotlib.figure.Figure()
second_figure_axis = second_figure.add_subplot()
second_figure_axis.plot(x, z)


w = np.cos(x)
first_figure_axis.plot(x, w)


display(first_figure) # Jupyter
display(second_figure)

这让用户手动控制图形,并避免了与pyplot的内部状态只支持单个图形相关的问题。

为每个迭代绘制独立帧的简单方法是:

import matplotlib.pyplot as plt
for grp in list_groups:
plt.figure()
plt.plot(grp)
plt.show()

然后python将绘制不同的帧。