Это, возможно, неудачный способ работы pyplot и matplotlib: вам нужно создать графики на соответствующих осях , а не присваивать результат из вызова pyplot.xcorr
осям.Таким образом: axis[n,p].xcorr(...)
.Таким образом, интерфейс внезапно становится несколько более объектно-ориентированным, чем обычные прямые вызовы pyplot
.
Все графики заканчиваются только на последнем рисунке, потому что вы вызываете
plt.xcorr(x,y,normed=True)
Itне имеет значения, если вы затем присваиваете возвращаемое значение элементам массива осей, что не следует делать, так как это разрушает исходный массив осей.
plt.xcorr
затем будет отображать все данные на одном графике поверхдруг с другом, потому что pyplot обычно действует на текущие активные оси, которые являются последними, созданными с помощью plt.subplots()
.
Это для объяснения.Вот пример решения (со случайными данными и простым точечным графиком):
import numpy as np
import matplotlib.pyplot as plt
data_num = 3
x = np.random.uniform(1, 10, size=(data_num, data_num, 20))
y = np.random.uniform(5, 20, size=(data_num, data_num, 20))
fig, axes = plt.subplots(nrows=data_num, ncols=data_num, sharex=True, sharey=True)
for n in range(data_num): #row index
for p in range(data_num): # column index
# Call `scatter` or any plot function on the
# respective `axes` object itself
axes[n,p].scatter(x[n,p], y[n,p])
print(f'plotting at index [ {n} , {p}]')
plt.savefig('figure.png')
и figure.png выглядит так (извините, нет разброса цветов или символов, только диаграммы рассеяния с голыми костями):
