В Python / Matplotlib, как разделить оси матрицы точечной диаграммы, созданной в цикле for с subplot2grid? - PullRequest
0 голосов
/ 07 мая 2019

В 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 не являются общими, каждый график имеет свои оси. Что мне здесь не хватает?

...