Следующий код не делает то, что я хочу: он показывает фигуру, ждет, когда пользователь закроет окно, а затем показывает вторую фигуру.
def my_plot(arr_x, arr_y):
import matplotlib.pyplot as plt
plt.plot(arr_x, arr_y)
plt.show()
if __name__ == '__main__':
my_plot((1, 2, 3), (10, 20, 90))
my_plot((101, 102, 103), (1, 5, 4))
Я хотел бы получить две цифрыотображается одновременно, чтобы я мог их визуально сравнить, затем, например, выбрать один и закрыть другой. Мое требование - хранить все вызовы Matplotlib только в одной пользовательской функции , такой как my_plot
.
Я прочитал, что show
должен вызываться после определения всех графиков, что не соответствует вышеуказанному требованию.
На самом деле я почти теряю надежду, что Matplotlib может сделать это самостоятельно, возможно, единственное решение - это что-то вроде использования нового потока для каждого вызова my_plot
?
РЕДАКТИРОВАТЬ:
Проблема решена.Настоящим я разделяю функцию, которую я написал благодаря ответу Незнани, который делает именно то, что я хочу.Конечно, это невозможно, но для большинства моих случаев использования это работает, и я могу с радостью забыть о Matplotlib.
#!/usr/bin/env python
import matplotlib.pyplot as plt
from os.path import splitext
def plot_XY(arr_x, arr_y, graph_file_name=None, graph_title="", x_label="", y_label=""):
"""Plot a series of (x, y) points.
If graph_file_name is not provided, the graph is
plotted in a temporary window; else, the file
format is deduced from the extension contained
in graph_file_name.
"""
def create_figure():
plt.figure()
plt.plot(arr_x, arr_y)
plt.title(graph_title)
plt.xlabel(x_label)
plt.ylabel(y_label)
if graph_file_name is None:
def my_show():
create_figure()
plt.show()
from multiprocessing import Process
Process(target=my_show, args=[]).start()
else:
extension = splitext(graph_file_name)[1][1:] # Get extension, without dot
if extension not in ("eps", "pdf", "pgf", "png", "ps", "raw", "rgba", "svg", "svgz"):
print(f"\"{extension}\" is not a file extension recognized by savefig. Assuming png.")
extension = "png"
graph_file_name += "." + extension
create_figure()
plt.savefig(graph_file_name, format=extension)
plt.close()
if __name__ == '__main__':
# Test: calling the function multiple times:
x = (1, 2, 3)
plot_XY(x, (1, 4, 2), graph_title="Example")
plot_XY(x, (2, 3, 1), graph_file_name="output.abc")
plot_XY(x, (1, 4, 9), x_label="x", y_label="x^2")