В Python / Matplotlib я пытаюсь сгенерировать матрицу графиков рассеяния, чтобы визуализировать корреляцию между произвольным числом выборок. Если у меня есть, например, четыре образца, я нацеливаюсь на такую матрицу:
A
B *
C * *
D * * *
A B C D
(* обозначает диаграмму рассеяния для соответствующей пары образцов)
Поскольку все образцы имеют одинаковые диапазоны, я хочу поделиться осями X и Y.
Я хочу отображать только участки, обозначенные *, которые уже работают. Я храню субплоты в списке, потому что чувствую, что мог бы использовать его, чтобы разделить ось Y для каждой строки матрицы и ось X для каждого столбца матрицы, но я не уверен, что это работает. Должен ли я установить sharex и sharey где-нибудь еще, может быть? Ниже вы можете найти мой текущий код.
import random
import matplotlib.pyplot as plt
a = [random.random() for _ in range(10)]
b = [random.random() for _ in range(10)]
c = [random.random() for _ in range(10)]
d = [random.random() for _ in range(10)]
print a
print b
print c
print d
samples = ["a", "b", "c", "d"]
samples_data = {"a": a, "b": b, "c": c, "d": d}
pdf = "subplot_matrix_test.pdf"
fig = plt.subplots(sharex=True, sharey=True)
axes = [0]*(2*(len(samples)-1))
counter = 0
for i in range(len(samples)-1, 0, -1):
init = True
for j in range(0, i):
axes[counter] = plt.subplot2grid((len(samples) - 1, len(samples) - 1), (i - 1, j))
axes[counter].scatter(samples_data[samples[j]], samples_data[samples[i]])
counter += 1
plt.tight_layout()
plt.savefig(pdf)
Этот скрипт создает матрицу диаграмм рассеяния, исключая те, которые мне не нужны. Но оси X и Y не являются общими, каждый график имеет свои оси. Что мне здесь не хватает?