获取单独的图和一个在matplotlib.pyplot中累积的图

elcex8rz  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(101)

正如预期我得到2个不同的情节从下面的代码。除了这两个我也想有一个单独的情节,显示在同一个图中的两条线,用不同的颜色和图例。
我不希望他们作为子地段,我希望他们每个人作为一个单一的情节和一个与所有的线在同一情节。

import matplotlib.pyplot as plt
import numpy as np

for i in range(2):

    x = np.arange(0, 4*np.pi, 0.1)
    y = np.sin(x)

    plt.plot(x, i*y+i)
    plt.title("Values")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.show()

我看了一下这个堆栈交换问题。
我可以将每个图的x和y值写入一个列表,以便稍后保存,但对于大型数据集,这似乎并不明智。

ibrsph3r

ibrsph3r1#

我不知道你使用的是哪个IDE,但是你的代码在技术上不会创建两个图形。如果你只调用plt.plot,它会在没有图形的情况下创建一个图形,或者在有图形的情况下添加到最后一个图形。如果你想创建一个新的图形,你需要调用plt.figure
因此,对于您的情况,您希望为组合图创建一个主图,然后为每个图创建一个新图。这些图可以使用plt.subplots()创建(没有任何nrowsncols参数,它创建一个单独的图,而不是图的矩阵)。
在循环中,我选择为单个图创建fig_iax_i,为全局图创建figax。由于您需要图例,因此应该为组合图添加标签。

import matplotlib.pyplot as plt
import numpy as np

plt.close("all")

# figure for the combined plot
fig, ax = plt.subplots()
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_title("Combined Plot")

x = np.arange(0, 4*np.pi, 0.1)
y = np.sin(x)

for i in range(2):
    # creates a new figure each loop
    fig_i, ax_i = plt.subplots()
    ax_i.plot(x, i*y+i)
    ax_i.set_title("Values")
    ax_i.set_xlabel("x")
    ax_i.set_ylabel("y")
    fig_i.show()

    # adds the data to the combine figure with a label for the legend
    ax.plot(x, i*y+i, label=i)

ax.legend()
fig.show()

个体1:

个体2:

组合:

相关问题